在没有端口转发的情况下运行 docker 镜像

时间:2021-05-31 21:49:02

标签: docker dockerfile docker-run

我正在使用以下命令在本地运行自定义图像(基于 docker 图像 Locust)

docker run -p 5557:5557 my-stress-test:0.1

我的 dockerfile 如下所示

FROM locustio/locust:latest

COPY ./ /mnt/locust

CMD ["-P", "5557", "-f", "/mnt/locust/locustfile.py"]

现在,我将此映像部署到我的云服务上,该服务运行此映像生成命令

docker run -p 5557 my-stress-test:0.1

这是我无法更改的命令。但是,我无法在没有端口转发的情况下运行映像,例如 -p 5557:5557。如何更改我的 dockerfile 或任何内容以在没有端口转发的情况下运行映像。

2 个答案:

答案 0 :(得分:0)

使用 Docker,您不能在 dockerfile 中或在设计运行之外的任何其他时间发布端口。

How to publish ports in docker files

最好向您的云提供商提出这个问题,以了解为什么您无法更改运行图像容器的命令。

答案 1 :(得分:0)

在 docker 中,你应该知道它的网络是如何工作的。 有 3 种类型的端口配置:

docker run my-stress-test:0.1
docker run -p 5557:5557 my-stress-test:0.1
docker run -p 127.0.0.1:5557:5557 my-stress-test:0.1

在第一种类型中,只有与此应用处于同一网络的应用才能连接到该端口。 在第二种类型中,容器网络内外的所有应用程序都可以连接到该端口。 第三种类型只有容器网络内的应用,宿主机内的其他应用可以连接到应用,宿主外的应用无法连接到应用。

我认为第三种类型是您正在寻找的。

如果您的主机中有多个网络,并且您希望其他主机上的其他应用程序访问该应用程序,则可以将该网络 ip 绑定到该端口。例如

docker run -p 192.168.0.10:5557:5557 my-stress-test:0.1