我想正常启动一个Docker容器,运行它,在其中安装一些东西,然后我想禁用网络,在其中运行更多命令,但是它们不应该访问网络。如何为正在运行的容器执行此操作?
我使用docker-py,并且知道可以使用network_disabled
禁用整个容器的联网。但是我不确定在创建容器之后如何禁用网络。理想情况下,我将使用命令sleep infinity
运行容器,然后在其中docker exec
运行一些命令,然后禁用联网,然后再使用docker exec
运行更多命令。
答案 0 :(得分:2)
也许一个选项是docker network disconnect
说明
断开容器与网络的连接
用法
docker network disconnect [OPTIONS] NETWORK CONTAINER
示例:
创建一个附加到默认网桥网络的容器
docker container run --rm -it alpine ping 8.8.8.8
,并在一段时间后断开连接:
docker network disconnect bridge <container-name>
答案 1 :(得分:1)
您应该在此处使用的标准模式是编写一个Dockerfile来执行所需的任何软件安装,并从中构建映像。实际上,这非常适合您的迫切需求,因为一旦构建了映像,就可以在没有网络的情况下运行它。
典型的Dockerfile骨架可能看起来或多或少像
FROM ubuntu:18.04
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive \
apt-get install --no-install-recommends --assume-yes \
thing-to-run-without-network
CMD ["/usr/bin/thing-to-run-without-network"]
然后您将其构建并运行为
docker build -t no-net-test .
docker run --rm --net none no-net-test
通常,您应该设置映像,以使docker run
可以完成容器所需的所有工作,而无需docker exec
(手动调试除外)。您永远不要将东西安装到正在运行的容器中:docker rm
容器一经出现,您的工作就会丢失,并且删除和重新启动容器是非常常规的。