在 Docker 多阶段构建中使用多个端口
Use multiple ports in Docker multistage build
我在 docker 中使用 MultiStage 来执行测试任务。
基础镜像是Selenium,暴露4444端口,暂存镜像是nginx,用于其他操作。
nginx 暴露了 80 端口。
如果我必须公开两个端口,只有 port80 被公开,而不是 4444 时使用
docker run -p 80:80 -p 4444:4444 someimage:2
Docker 文件:
FROM selenium/standalone-firefox AS base
RUN python3 try.py
FROM nginx:alpine
COPY --from=base /report.html /usr/share/nginx/html
您误解了多阶段构建的工作原理。
您的最终镜像 不 包含您在 Dockerfile.
中指定的每个镜像的所有内容
它确实包含最后一个FROM
指令中指定的图像和下面所有命令的结果的所有内容。
在你的情况下,它包含从图像 nginx:latest 和从上一个构建阶段复制的文件 report.html 的所有内容 -意味着当你将它用于 运行 一个容器时,没有任何东西在端口 4444 上监听,所以暴露它是没有意义的。
我在 docker 中使用 MultiStage 来执行测试任务。 基础镜像是Selenium,暴露4444端口,暂存镜像是nginx,用于其他操作。
nginx 暴露了 80 端口。 如果我必须公开两个端口,只有 port80 被公开,而不是 4444 时使用
docker run -p 80:80 -p 4444:4444 someimage:2
Docker 文件:
FROM selenium/standalone-firefox AS base
RUN python3 try.py
FROM nginx:alpine
COPY --from=base /report.html /usr/share/nginx/html
您误解了多阶段构建的工作原理。
您的最终镜像 不 包含您在 Dockerfile.
中指定的每个镜像的所有内容它确实包含最后一个FROM
指令中指定的图像和下面所有命令的结果的所有内容。
在你的情况下,它包含从图像 nginx:latest 和从上一个构建阶段复制的文件 report.html 的所有内容 -意味着当你将它用于 运行 一个容器时,没有任何东西在端口 4444 上监听,所以暴露它是没有意义的。