Я пытаюсь сделать свой контейнер доступным в сети для всех устройств, а не только для узла докеров.
Я пытаюсь сделать свой контейнер доступным в сети для всех устройств, а не только для узла докеров.
Я хочу сделать конфигурацию докера так, чтобы к докеру можно было получить доступ (ssh в моем случае) из любого места в моей сети.
Начните с создания нового устройства моста.
brctl addbr br-em1
ip link set br-em1 вверх
добавь это устройство к твоему мосту
Настройте мост с адресом, который раньше принадлежал Ens160
IP-адрес del 9.158.143.52/24 dev ens160
ip адрес добавить 9.158.143.52/24 dev br-em1
переместить маршрут по умолчанию на мост
До этого момента все работает. Хост-докер имеет подключение к сети.
docker run -itd --name web ubuntu
Создайте пару интерфейсов veth:
brctl addif br-em1 web-ext
И добавьте интерфейс web-int в пространство имен контейнера:
nsenter -t $ (docker-pid web) -n ip ссылка установить web-int вверх
nsenter -t $ (docker-pid web) -n ip addr добавить 9.158.143.65/24 dev web-int
До сих пор veth создается внутри контейнера докеров, а интернет работает внутри контейнера.
nsenter -t $ (docker-pid web) -n ip-маршрут по умолчанию
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