docker 容器首次执行完成后如何自定义卷和端口?

How to customize docker container's volume and port after it finished its first execution?

我是 docker(容器化的东西)的新手。我正在尝试在 GCP(CentOS 7 实例)中学习 docker 并将我的简单交互式 python 程序容器化。我成功地为我的 python 程序创建了一个 docker 图像。

我的疑问是什么时候 运行

docker run -it my image name

使用随机名称调用启动容器 "classy-brown" 并且我的程序执行成功......并且没有问题。

问题是,有什么方法可以为我现有的容器添加端口和容量,即("classy-brown")

并且每次我 运行 这个命令时

docker run -it my image name

创建了一个新的容器?为什么它对我这样做?

请帮我解决这个问题。

欢迎来到 Whosebug。 您可以在启动容器时传递“--name”参数,为其指定一个自定义名称。

此外,您可以使用“-p”选项来公开特定端口。

查看此页面以查看所有 docker run 选项 -

https://docs.docker.com/v17.12/engine/reference/commandline/run/#options

不,您不能在已创建的容器上设置卷或端口。您可以使用 docker start -it <container_id> or <conatiner_name> 以交互方式多次使用容器。

如果你想在容器上设置卷或端口,你应该在容器创建过程中使用 docker run 这样的命令;

docker run -p 80:80 -v /home/somedir:/foo --name my_container

如果你想反复使用同一个容器,只需使用docker start命令。

docker start -it my_container

请注意,-it 用于在 docker startdocker run 上进行交互式访问。如果您不想使用 tty 访问容器,只需省略 -it 标志即可。

如果你想访问已经运行的容器,你可以使用docker exec命令。关于它的更多信息,您可以找到 here.

可以通过手动编辑 iptable 规则 来添加新的端口映射,但我认为这不是一个好的做法。另外,如果你运行 docker ps,这个新添加的映射将不可见


如果您真的 需要添加端口映射或装载卷到您已经 运行ning 的容器。您可以通过

将此容器commit转换为图像
docker commit <container-id>

停止并删除您的容器,然后 运行 使用 -p-v 的新图像,例如:

docker run -p <port-mapping> -v <mount> <commited-image>

请注意,如果您的容器很大(容器层中有大量数据),commit 可能会花费很多时间。

Don't rely on this kind of approach too much, but think twice before you run your container.

祝你好运!