gpt4 book ai didi

docker - 在实时 Docker 容器上公开端口

转载 作者:bug小助手 更新时间:2023-10-28 01:28:43 26 4
gpt4 key购买 nike

我正在尝试创建一个 Docker 容器,它就像一个完整的虚拟机。我知道我可以使用 Dockerfile 中的 EXPOSE 指令来公开端口,并且可以使用带有 docker run-p 标志来分配端口,但是一旦容器是实际运行时,是否有命令可以实时打开/映射其他端口?

例如,假设我有一个运行 sshd 的 Docker 容器。其他人使用容器 ssh 并安装 httpd。有没有办法把容器上的 80 端口暴露出来,映射到宿主机上的 8080 端口,这样人们就可以访问容器中运行的 web 服务器,而无需重启?

最佳答案

您无法通过 Docker 执行此操作,但您可以从主机访问容器的未公开端口。

如果你有一个容器在它的 8000 端口上运行,你可以运行

wget http://container_ip:8000

要获取容器的 IP 地址,请运行 2 个命令:

docker ps
docker inspect container_name | grep IPAddress

在内部,当您运行镜像时,Docker 会调用 iptables,因此可能对此有一些变化。

要在本地主机的 8001 端口上公开容器的 8000 端口:

iptables -t nat -A  DOCKER -p tcp --dport 8001 -j DNAT --to-destination 172.17.0.19:8000

解决此问题的一种方法是使用所需的端口映射设置另一个容器,并比较 iptables-save 命令的输出(不过,我不得不删除其他一些强制流量通过 docker 代理的选项)。

注意:这是对 docker 的颠覆,所以应该意识到它可能会产生蓝烟。

另一种选择是查看(新?0.6.6 后?)-P 选项 - 它将使用随机主机端口,然后将它们连接起来。

在 0.6.5 中,您可以使用 LINKs 功能来创建一个与现有容器对话的新容器,并通过一些额外的中继到该容器的 -p 标志? (我还没有使用过链接。)

使用 docker 0.11?您可以使用 docker run --net host .. 将容器直接附加到主机的网络接口(interface)(即 net 没有命名空间),因此 all 您在其中打开的端口容器暴露在外。

关于docker - 在实时 Docker 容器上公开端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19897743/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com