在已运行的Docker容器中如何禁用网络?

时间:2019-05-19 20:40:46

标签: docker

我想正常启动一个Docker容器,运行它,在其中安装一些东西,然后我想禁用网络,在其中运行更多命令,但是它们不应该访问网络。如何为正在运行的容器执行此操作?

我使用docker-py,并且知道可以使用network_disabled禁用整个容器的联网。但是我不确定在创建容器之后如何禁用网络。理想情况下,我将使用命令sleep infinity运行容器,然后在其中docker exec运行一些命令,然后禁用联网,然后再使用docker exec运行更多命令。

2 个答案:

答案 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>

enter image description here

答案 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容器一经出现,您的工作就会丢失,并且删除和重新启动容器是非常常规的。