2016-08-04 3 views
1

Возможно ли добавить возможность (например: NET_ADMIN) после фактического запуска контейнера?Как мы можем добавить возможности к работающему контейнеру докеров?

Я начал контейнер несколько дней назад, и предоставляемая им служба используется несколькими другими процессами, которые работают удаленно на других серверах. Мне нужно добавить к нему интерфейс loopback, но, к сожалению, я забыл запустить контейнер с --cap-add=NET_ADMIN и, следовательно, теперь не смог добавить интерфейс.

Я ищу вариант, если это возможно как-то передать этому контейнеру.

+0

Интерфейс loopback включен по умолчанию в контейнере, даже если вы должны запустить его без сети. Какие варианты вы использовали для запуска без них? – BMitch

+0

Требование состоит в том, чтобы добавить дополнительные интерфейсы loopback для назначения дополнительных IP-адресов. – VanagaS

+0

Добавление возможностей в запущенный контейнер было бы неплохо. Также необходимо, если вам нужно, например, начать использовать iptables. – jjmontes

ответ

-2

вы можете запускать команды внутри работающего контейнера, используя docker exec -it {container_id} /bin/bash. Это создаст для вас колоду, с которой вы можете запускать команды. но, как правило, не очень хорошая практика иметь изменения в состояниях изображения, поскольку он удаляет переносимость изображений.

2

Нет, вы не можете изменять возможности работающего контейнера. Их можно определить только при первом создании или запуске (который является просто созданием + началом) контейнера. Вам нужно будет создать новый контейнер с требуемыми возможностями.

Следует отметить, что вы можете назначить дополнительные сетевые интерфейсы работающему контейнеру с docker network connect, но я не знаю ни одного шлейф-драйвера, который вы могли бы использовать для решения вашей проблемы с использованием этой техники.

+0

Я установил приложение в этот контейнер, который использует жестко закодированные (доступные) IP-адреса для связи с внешними службами. Я установил внешние службы в этом же контейнере. Настройка петли должна обеспечивать, чтобы службы обменивались данными в самом контейнере. – VanagaS

+0

Лучшей практикой было бы установить каждую службу в отдельный контейнер. Вы можете заставить их работать в собственной сети докеров и присоединить эти сети к вашему запущенному контейнеру.Из этого и ваших других вопросов кажется, что вы пытаетесь использовать свой контейнер в качестве виртуальной машины, а не инструмент изоляции приложений, который очень похож на анти-шаблон для контейнеров. – BMitch

+0

сервис - это еще один военный файл, который можно запустить на одном и том же сервере j2ee. Я не хочу создавать ненужное изображение, которое не будет использоваться иначе. – VanagaS

3

Vanagas

1.Завершите Контейнер:

docker stop yourcontainer; 

2.Get контейнер ID:

docker inspect yourcontainer; 

3.Modify hostconfig.json (по умолчанию докер путь:/Var/Библиотека/докеры, вы можете изменить свои)

vim /var/lib/docker/containers/containerid/hostconfig.json 

4.Поиск «CapAdd» и изменить значение null на ["NET_ADMIN"];

....,"VolumesFrom":null,"CapAdd":["NET_ADMIN"],"CapDrop":null,.... 

5.Restart docker in host machine;

service docker restart; 

6.Начните свойконтинер;

docker start yourcontainer; 

Это работает для меня, имейте это в виду.