如何编辑现有容器的选项?

我从EXPOSE 22中使用EXPOSE 22的图像docker create了一个容器( Dockerfile

我通过docker start <container name or ID>启动它,并通过ssh访问它。

我现在需要公开一个运行在这个容器中的服务的一个端口。 我不能重新创build它,它必须改变其启动参数,以暴露额外的端口。 这可能吗?

我希望docker start将允许docker createdocker run相同的参数,但事实并非如此。

注:我知道docker的哲学是创造短暂的容器 。 这是一个生活中的事实,我必须处理这个高度定制的容器(而不是重新创build它)

你暗示你没有使用docker-compose来启动它,而是一个普通的docker run 。 我会研究docker-compose ,因为那样你可以停下来,然后用一个新的configuration文件重新启动它。 这允许可重现地创build容器。 所有使用docker run的例子无处不在。

在你的具体情况下,我认为你必须添加一个iptables规则。 默认情况下, dockerd操纵iptables规则来redirectstream量(甚至可能是EXPOSE所做的)。 如果你使用iptables -t nat -L -n你可能会看到你的端口是如何被暴露的。 你可以创build一个类似的规则。

这确实意味着当你重启你的服务器时,规则又一次消失了。 你将不得不保存你的iptables状态。 这也dockerd操作iptables的不便。 接触iptables的其他服务(如中央configuration系统, fail2ban ,甚至简单的自动保存规则)很难pipe理。

您可以在create命令中打开端口。 例如打开80端口就可以运行。

 docker create -p 80:80 container/name 

更多信息可以在https://docs.docker.com/engine/reference/commandline/create/find