Как автоматически выполнить скрипт на хосте после запуска docker-контейнера?

Исходно есть: хост с запущенным docker daemon. В параметрах запуска отключен iptables и ip-masq. У хоста внешний сетевой интерфейс (eth0) подключен к мосту (br0), на мосте настроен статический адрес (192.168.0.10/24).
Нужно запустить несколько контейнеров и каждому назначить фиксированный адрес:
  • app1 - 192.168.0.21
  • app2 - 192.168.0.22
  • app3 - 192.168.0.23

Для запуска использую docker-compose up -d. Compose интерестен тем, что сам перезапускает контейнер, если тот рухнет.

Есть прекрасная статья на эту тему: blog.oddbit.com/2014/08/11/four-ways-to-connect-a-...
Предлагается сначала запустить контейнер как есть, а потом с хоста добавить ему адрес:

# docker run -d --name app1 local/app1
# ip link add app1-int type veth peer name app1-ext
# brctl addif br0 app1-ext
# ip link set netns $(docker-pid app1) dev app1-int
# nsenter -t $(docker-pid app1) -n ip link set app1-int up
# nsenter -t $(docker-pid app1) -n ip addr add 192.168.0.21/24 dev app1-int
# nsenter -t $(docker-pid app1) -n ip route del default
# nsenter -t $(docker-pid app1) -n ip route add default via 192.168.0.1 dev app1-int


Вариант подходящий, можно завернуть в скрипт.
Возникает только вопрос: когда приложение упадет, compose перезапустит его. Есть ли способ автоматически запустить этот скрипт на хосте сразу после (пере)запуска контейнера?

Есть еще один вариант: запускать скрипт внутри контейнера (через CMD), который до старта приложения обращается к хосту (например, через ssh) и запускает скрипт. Выглядит криво.
  • Вопрос задан
  • 563 просмотра
Решения вопроса 1
Возможно получится указать статичный ip https://docs.docker.com/compose/compose-file/#/networks
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы