我有一个docker create
从图像创建的容器(),该容器正在EXPOSE 22
使用Dockerfile
我通过 启动它docker start <container name or ID>
并通过 访问它ssh
。
我现在需要公开此容器中运行的服务的另一个端口。我无法重新创建它,必须更改其启动参数才能公开该额外端口。这可能吗?
我希望这将允许与或docker start
相同的参数,但事实并非如此。docker create
docker run
注意:我知道docker的哲学是创建临时容器。现实情况是,我必须处理这个高度定制的容器(而不是重新创建它)
答案1
你暗示你没有使用docker-compose
来启动它,而是使用正常的docker run
。我会研究docker-compose
,因为这样你就可以停止它,然后用新的配置文件重新启动它。这允许可复制的创作容器。docker run
随处可见的仅使用容器的例子都无济于事。
在您的特定情况下,我认为您只需添加一条iptables
规则即可。默认情况下,dockerd
操纵iptables
规则以重定向流量(这甚至可能是唯一这样EXPOSE
做的事情)。如果您这样做,iptables -t nat -L -n
您可能会看到您的端口是如何暴露的。您可以创建类似的规则。
这意味着当您重新启动服务器时,规则又会消失。您必须保存状态iptables
。这又涉及到dockerd
操作的不便。与其他涉及 iptables 的服务(如中央配置系统、,甚至简单的规则自动保存)iptables
相比,管理起来很困难。fail2ban
答案2
您可以在创建命令中打开端口。例如,要打开端口 80,请运行以下命令。
docker create -p 80:80 container/name
更多信息请访问 https://docs.docker.com/engine/reference/commandline/create/