问题标签 [docker-multi-stage-build]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1142 浏览

docker - Docker 多阶段构建和测试结果 - 如何获得它们?

显然,我发现的所有关于多阶段构建的文章都涵盖了快乐的道路。

但是,当某些事情失败时,如何从构建器容器中获取测试结果(例如单元或验收测试)?

0 投票
1 回答
2749 浏览

docker - Docker:构建完成后如何使用多阶段映像

设想

  • 多阶段构建将多个 Dockerfile 部分组合成一个
  • 中间阶段和最终阶段可以从上层阶段复制文件
  • 建议最后阶段仅包含所需的二进制文件。

考虑到这些,我想建立以下

基础阶段的重用

  • 我不想在中间阶段运行测试,而是在镜像之外运行它们,以便我可以重新排序测试序列并在管道层添加更多开关(Jenkins CI、Travis 等)
  • 我希望能够使用构建的基本映像。
  • 正如测试阶段所建议的那样,Dockerfile.test可以使用辅助设备。但是,我想维护一个包含所有阶段的单个 Dockerfile。

这是运行的要求

问题

  • 目前支持吗?
  • 有解决方法吗?
0 投票
2 回答
616 浏览

docker - 如何在不使用 Docker Compose 的情况下在 Dockerfile 中有两个图像?

如何在 dockerfile 中有两个图像并链接?

我不想使用 docker compose,我想要这样的东西

但我不知道如何加入图像

谢谢

0 投票
1 回答
666 浏览

c++ - 迁移 CMake 导致多阶段 Docker 构建

我有一个基于 CMake 的 C++ 项目,我需要将它集成到 CI/CD 管道中。管道有两个步骤,一个用于构建,另一个用于测试。在 Docker 容器中创建这个环境就像一个魅力,但会产生一个 2GB 的容器。所以我正在尝试实现一个多阶段的 Docker 构建,我将可执行文件复制到一个 Alpine 基础映像中。除了 cmake/ctest 功能外,所有这些都有效。我想公开将执行 CMake 生成目标的命令“make test”。

这是 CMake 为运行 ctest 创建的目标。

我无法弄清楚的问题是 ctest 从哪里获取测试配置。当我发出

在容器中它没有显示任何测试。

在 CMake 上寻找 SME 来教育我这应该如何工作。

0 投票
2 回答
890 浏览

docker - 为什么 ASP.NET Core Multi-Stage Dockerfile 使用 4 Stages

当您在 ASP.NET Core 站点上的 Visual Studio 中单击“添加 Docker 支持”时,这是默认的多阶段 Dockerfile。

为什么他们选择使用四个阶段,以阶段开始和结束basepublish另外,为什么要使用相同的build基础图像创建舞台。为什么 Dockerfile 不是这样分三个阶段的:

我错过了一些优势吗?

0 投票
2 回答
200 浏览

docker - 在单个容器中加入 docker 图像

我有一个由前端、后端和 mongodb 数据库组成的应用程序,它们中的每一个都停靠在一个容器中。当我使用 docker compose 构建它们时,我的应用程序 (3) 中的图像数量与部件数量一样多。

有没有办法从这 3 个图像构建一个容器,从而构建一个图像?

谢谢

0 投票
1 回答
1146 浏览

docker - 为什么我在这个多阶段构建中的最终 docker 映像如此之大?

在阅读了多阶段 docker 构建可以极大地减少图像大小之后,我试图缩小用于构建 Go 二进制文件的 Dockerfile 的图像大小。我的 Dockerfile 在下面。

然而,生成的图像似乎根本没有缩小尺寸。我怀疑该golang:alpine图像以某种方式被包含在内。下面是在docker build .上面的 Dockerfile 上运行的结果截图。

码头工人图像

alpine:latest图像只有 4.15MB 。添加已编译二进制文件的大小(相对较小),我预计最终图像的大小可能不会超过 15MB。但它是 407MB。我显然做错了什么!

如何调整我的 Dockerfile 以生成更小的图像?

0 投票
1 回答
663 浏览

docker - Docker 多阶段构建不保留 RUN 命令的结果

我正在使用 docker-engine 17.05.0~ce-0~ubuntu-xenial 来构建这个 Dockerfile:

但是输出并不像预期的那样。我从 wordpress:apache 复制的代码已正确添加到 /var/www/html,但 wp-config.php 仅在实际构建步骤中出现,而不是在生成的图像中。我不明白我在这里做错了什么。在构建时,它会像这样结束:

为什么在第一次 RUN 中创建的 wp-config.php 在下一步中不可用,而我使用 COPY 命令放在那里的数据仍然存在?

(如果你想知道我想要实现什么,这只是一个 MCVE。)

0 投票
1 回答
2530 浏览

docker - Docker 多阶段构建无法识别已安装的应用程序

该图像run包含一个已安装的npm. 尽管如此,npm install返回错误:/bin/sh: 1: npm: not found

这怎么可能?我究竟做错了什么?


编辑:

作为对@BMitch 评论的回答,当我运行RUN图像时,容器中的节点位于 PATH 上,我可以使用它。路径是/root/local/bin。我已经附上了所有的 Dockerfile。

我有 3 个 docker 文件:
APP
你以前见过的那个。

建造


编辑 2:
重要的是,如果我删除RUN npm...命令,那么整个构建成功并且结果图像包含 npm 并且我可以使用它(我已经通过在交互模式下使用容器进行了验证)。


编辑 3:
这里有很多更简单的解决方案,可以立即试用:

结果是:cat: can't open '/root/test.txt': No such file or directory

0 投票
1 回答
1939 浏览

docker - 多阶段构建映像不起作用,而正常构建则起作用

我有一个 Dockerfile,它从最新的 golang docker 镜像(现在是 1.10.3)构建一个 golang 项目(监听 Twitter 流并通过一些过滤器列出推文),如下所示:

当我运行由 docker build 命令创建的图像时,它运行没有问题。问题是图像大小约为 900MB。

当我尝试使用多阶段构建构建 docker 时,如下所示:

docker 映像已成功构建并运行,但它只是在发布推文时不向我显示推文,而且它也没有显示任何错误,这是最令人困惑的部分。即使我 ssh 进入正在运行的容器并 ping google,它也会显示应有的一切。

任何人都有一些提示我可以如何调试这个问题,或者从正在运行的 Docker 映像中获取更多日志?