在Docker多阶段构建中使用多个端口

问题描述

我正在docker中使用MultiStage来执行测试任务。 基本映像是Selenium,它暴露了端口4444,而暂存映像是Nginx,用于其他操作。

Nginx的端口80已暴露。 如果必须同时暴露两个端口,则仅暴露port80,而使用时则不暴露4444

docker run -p 80:80 -p 4444:4444 someimage:2

Dockerfile:

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上没有任何监听,因此公开它毫无意义。