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 start
或 docker 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.
祝你好运!
我是 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 start
或 docker 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.
祝你好运!