Изменить IP-адрес моста Docker0 по умолчанию

После запуска docker-ce (18.06.1-ce, сборка e68fc7a) на Ubuntu Server 16.04 создается следующее:

$ ifconfig
docker0   Link encap:Ethernet  HWaddr 02:42:fe:36:81:72
          inet addr:172.17.0.1  Bcast:0.0.0.0  Mask:255.255.0.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
      RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

К сожалению, мой компьютер находится в этой сети. Это означает, что, как только запускается докер, я теряю ssh-соединение с сервером.

Попытка 1

Несколько форумов говорят добавить следующее к /etc/docker/daemon.json:

{
  "bip": "192.168.1.1/24"
}

Попытка 2, используя этот SO принятый ответ

Одно возможное решение, которое работает, работает:

sudo ip addr add dev docker0 192.168.1.1/24
sudo ip addr del dev docker0 172.17.0.1/16

Источник: forums.docker.com

Хотя это возможное решение, я должен сделать это после запуска службы докера. Что-то, что я не могу сделать, потому что тем временем теряю связь.

Попытка 3, после @Light.G ответа

После добавления -bip в ExecStart строка, пытающаяся запустить docker дает (journalctl -xe):

-- Unit docker.socket has begun starting up.
Sep 11 11:13:19 PTLISLABHLC01 systemd[1]: Listening on Docker Socket for the API.
-- Subject: Unit docker.socket has finished start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit docker.socket has finished starting up.
--
-- The start-up result is done.
Sep 11 11:13:19 PTLISLABHLC01 systemd[1]: docker.service: Start request repeated too quickly.
Sep 11 11:13:19 PTLISLABHLC01 systemd[1]: Failed to start Docker Application Container Engine.
-- Subject: Unit docker.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit docker.service has failed.
--
-- The result is failed.
Sep 11 11:13:19 PTLISLABHLC01 systemd[1]: docker.socket: Unit entered failed state.
Sep 11 11:13:19 PTLISLABHLC01 polkitd(authority=local)[1062]: Unregistered Authentication Agent for unix-process:15666:32644036 (system bus name :1.56, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8) (disconnected from bus)

Единственная ошибка здесь в том, что вы должны использовать --bip и не -bip, Проверьте принятый ответ!

3 ответа

Решение

Нет необходимости в дополнительной сущности:

  • Отредактируйте /lib/systemd/system/docker.service перед запуском Docker. добавлять —-bip “192.168.1.1/24” в конце строки ExecStart=/usr/bin/dockerd,
  • systemctl daemon-reload
  • systemctl start docker

Протестировано на Ubuntu 16.04 с Docker 17.03-ce.

Изменить на 2018-09-13:
Поскольку нам все еще могут понадобиться пользовательские мостовые сети, все еще существует потенциальная проблема.

По умолчанию мосту назначается одна подсеть из диапазонов 172.[17-31].0.0/16 или 192.168.[0-240].20/20, которая не пересекается ни с одним существующим интерфейсом. В отличие от мостовой сети по умолчанию, определенные пользователем сети поддерживают ручной IP-адрес и назначение подсети. Если назначение не задано, то драйвер IPAM докера по умолчанию назначает следующую подсеть, доступную в личном пространстве.

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

Моим решением было сделать это с помощью службы, которая запускает команду оболочки.

я создал docker-network-setup.sh:

sudo ip addr add dev docker0 192.168.1.1/24
sudo ip addr del dev docker0 172.17.0.1/16

chmod u+x docker-network-setup.sh чтобы убедиться, что вы можете выполнить его.

А также docker-network-setup.service:

[Unit]
Description=Change docker0 default IP
# When systemd stops or restarts the docker.service, the action is propagated to this unit
PartOf=docker.service
# Start this unit after the docker.service start
After=docker.service

[Service]
# The program will exit after running the script
Type=oneshot
# Execute the shell script
ExecStart=/bin/bash /home/user01/docker-network-setup.sh start
# This service shall be considered active after start
RemainAfterExit=yes

[Install]
# This unit should start when docker.service is starting
WantedBy=docker.service

sudo cp docker-network-setup.service /etc/systemd/system и сервис включен!

Не забывай sudo systemctl daemon-reload если вы хотите проверить сервис прямо сейчас.

Я боролся с пиринговым соединением AWS VPC, которое не работало с моими контейнерами Docker, пока я не нашел этот поток.

Если вы используете подсеть AWS 172.17.xx , она может конфликтовать с подсетью Docker по умолчанию (172.17.0.1/16), поэтому между этими подсетями ничего работать не будет ...

Один из способов исправить это - просто перейти в другую подсеть AWS (что не всегда возможно из-за устаревших систем / конфигураций);

Другой способ - изменить подсеть Docker по умолчанию с помощью настройки bip в /etc/docker/daemon.json (как описано выше) - что-то вроде:

      {
  "bip": "192.168.1.1/24"
}

Лучшим подходом будет просто избегать использования подсети 172.17.xx в AWS ...

Другие вопросы по тегам