Как изменить подсеть и IP-адрес контейнера Docker? - PullRequest
0 голосов
/ 18 января 2019

У меня есть Docker-контейнер, созданный с помощью docker-compose, работающей на хосте.

Полученный Docker-контейнер имеет свою собственную сеть:

docker exec -it containername /bin/bash

root@4913fd78f383:/# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
155: eth0@if156: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:14:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.20.0.2/16 brd 172.20.255.255 scope global eth0
       valid_lft forever preferred_lft forever

Итак, контейнер занимает IP 172.20.0.2 / 16 в хосте.

Моя проблема в том, что таким образом мой хост не может подключиться к реальным хостам 172.20.xy в сети , где хост подключен.

Итак, контейнер (со своим собственным ip) скрывает другие реальные адреса.

Мне нужно изменить IP-адрес существующего контейнера, возможно, без его удаления / повторного создания.

Я создал свой контейнер с помощью docker compose, поэтому я использую эти команды для запуска / остановки контейнера:

docker start containername
docker stop containername

Заранее спасибо.

1 Ответ

0 голосов
/ 18 января 2019

В общем, у вас есть два варианта:

  1. Использование докера. Создайте сеть с пользовательской подсетью, затем из docker-compose присоединитесь к этой сети. для более подробной информации

  2. Использование docker-compose. Определите настройки сети. для более подробной информации

В вашем случае, в частности, вы должны сделать следующее:

  1. Создание сети с помощью Docker Cli.
    docker network create -d bridge --subnet 172.25.0.0/16 my_custom_network
  1. заставить контейнер присоединиться к сети
    docker network connect my_custom_network my_running_container
  1. Удалить контейнер из старой сети

Вы можете получить имя старой сети, используя docker inspect my_running_container

    docker network disconnect old_network my_running_container
  1. Удалить ненужную сеть, созданную docker-compose.
    docker network rm old_network
  1. Переконфигурируйте docker-compose.yml для использования новой сети, чтобы сохранить те же настройки, если кто-то снова использовал docker-compose up.

Для более подробной информации о вышеупомянутых опциях отметьте Работа с сетями

Обратите внимание, что вы также можете настроить докер по умолчанию, как описано в здесь

...