Как отключить сеть для контейнера Docker после его запуска? - PullRequest
1 голос
/ 19 мая 2019

Я хотел бы нормально запустить контейнер Docker, запустить его, установить в него некоторые вещи, а затем я хотел бы отключить сеть, выполнить в ней еще несколько команд, но они не должны иметь доступа к сети. Как я могу сделать это для работающего контейнера?

Я использую docker-py и знаю, что могу использовать network_disabled, чтобы отключить сетевое взаимодействие для всего контейнера. Но я не уверен, как я могу отключить сеть после того, как контейнер уже создан. В идеале я бы запустил контейнер с командой sleep infinity, затем docker exec с некоторыми командами в нем, затем отключил сеть, а затем выполнил еще несколько команд, используя docker exec.

Ответы [ 2 ]

2 голосов
/ 20 мая 2019

Может быть, вариант будет Отключение Docker Network

Описание

Отключите контейнер от сети

Использование

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 голос
/ 19 мая 2019

Стандартный шаблон, который вы должны использовать здесь, это написать 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 контейнер, и удаление и перезапуск ваших контейнеров будет чрезвычайно обычным делом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...