Назад | Перейти на главную страницу

подключить док-контейнер к локальной сети

Что я пытаюсь сделать

Я пытаюсь сделать свой контейнер доступным в сети для всех устройств, а не только для узла докеров.

Информация

Что я пытаюсь сделать

Я пытаюсь сделать свой контейнер доступным в сети для всех устройств, а не только для узла докеров.

Я хочу сделать конфигурацию докера так, чтобы к докеру можно было получить доступ (ssh в моем случае) из любого места в моей сети.

Шаги, сделанные до сих пор

  1. Начните с создания нового устройства моста.

    • brctl addbr br-em1

    • ip link set br-em1 вверх

  2. добавь это устройство к твоему мосту

    • brctl addif br-em1 ens160
  3. Настройте мост с адресом, который раньше принадлежал Ens160

    • IP-адрес del 9.158.143.52/24 dev ens160

    • ip адрес добавить 9.158.143.52/24 dev br-em1

  4. переместить маршрут по умолчанию на мост

    • ip route del default
    • ip route добавить значение по умолчанию через 9.158.143.254 dev br-em1

До этого момента все работает. Хост-докер имеет подключение к сети.

  1. docker run -itd --name web ubuntu

  2. Создайте пару интерфейсов veth:

    • ip ссылка добавить web-int тип veth peer name web-ext
  3. brctl addif br-em1 web-ext

  4. И добавьте интерфейс web-int в пространство имен контейнера:

    • ip link set netns $ (docker-pid web) dev web-int
  5. nsenter -t $ (docker-pid web) -n ip ссылка установить web-int вверх

  6. nsenter -t $ (docker-pid web) -n ip addr добавить 9.158.143.65/24 dev web-int

До сих пор veth создается внутри контейнера докеров, а интернет работает внутри контейнера.

  1. nsenter -t $ (docker-pid web) -n ip-маршрут по умолчанию

  2. nsenter -t $ (docker-pid web) -n ip route добавить значение по умолчанию через 9.158.143.254 dev web-int

Эта проблема

Это следующие шаги. После двух последних шагов интернет перестает работать с контейнером. Я не могу пинговать хост-машину докера с любого другого компьютера в сети (который ранее работал).

Есть ли какое-либо правило iptables, которое нужно добавить помимо этих шагов. Если да, пожалуйста, помогите.

PS: мой ip docker0 - 172.17.0.1 Используемая ссылка: http://blog.oddbit.com/2014/08/11/four-ways-to-connect-a-docker/ (с устройствами моста linux)

Используемый образ Ubuntu имеет запущенную и работающую службу ssh.

Подход, который я использовал при настройке чего-то подобного, заключался в статическом назначении IP-адресов каждому контейнеру. Затем я «сложил» IP-адреса как вторичные IP-адреса на интерфейсе моста, vmbr0.

Моя сетевая настройка:

$ ip a l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:22:15:91:XX:XX brd ff:ff:ff:ff:ff:ff
    inet6 fe80::222:15ff:fe91:XXXX/64 scope link
       valid_lft forever preferred_lft forever
3: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
    link/ether 00:22:15:91:XX:XX brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.10/24 brd 192.168.1.255 scope global vmbr0
    inet 192.168.1.101/24 scope global secondary vmbr0
    inet 192.168.1.103/24 scope global secondary vmbr0
    inet6 fe80::222:15ff:fe91:c12d/64 scope link
       valid_lft forever preferred_lft forever
4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
    inet 172.17.42.1/16 scope global docker0

Я добавил эти вторичные IP-адреса вот так:

$ ip addr add 192.168.1.101/24 dev vmbr0
$ ip addr add 192.168.1.101/24 dev vmbr0

Я бы запустил свои контейнеры так:

$ docker run --name='bind' -d \
    -p 192.168.1.101:53:53/udp \
    -p 192.168.1.101:10000:10000 sameersbn/bind:latest