2016-11-30 4 views
1

Я создал пользовательскую сеть (режим моста) hb1 и добавил 2 контейнера. Однако я не могу подключиться к ним с внешнего хоста в своей сети.подключиться к контейнеру с удаленной машины

Я проверил и следовал инструкциям here и here как можно ближе.

[email protected]:~ $ docker network inspect hb1 
[ 
    { 
     "Name": "hb1", 
     "Id": "278a4ba8bb7a4a34b25b5f5fde9a965a807ff896d5e57c2b1d7d39af60d0a046", 
     "Scope": "local", 
     "Driver": "bridge", 
     "EnableIPv6": false, 
     "IPAM": { 
      "Driver": "default", 
      "Options": {}, 
      "Config": [ 
       { 
        "Subnet": "192.168.1.32/27", 
        "Gateway": "192.168.1.33" 
       } 
      ] 
     }, 
     "Internal": false, 
     "Containers": { 
      "7dc7be3ae45813450bb7f75a6e2c7b4d93e59aa147aa7d393061748b8201381a": { 
       "Name": "modest_bohr", 
       "EndpointID": "eda20bbb52319b10911f3da6f6afadbd2167298d5a9cfd5c91f933f4b6d5fe86", 
       "MacAddress": "02:42:c0:a8:01:22", 
       "IPv4Address": "192.168.1.34/27", 
       "IPv6Address": "" 
      }, 
      "f12fbc30bcf5e37737bfe8c7868dcd40e6c632bb3672f5641ffd6960ede4f777": { 
       "Name": "infallible_torvalds", 
       "EndpointID": "92d0ecfad597485c25ad309d48c3c77b9368f25ebbd851b1168f59a795c497f2", 
       "MacAddress": "02:42:c0:a8:01:23", 
       "IPv4Address": "192.168.1.35/27", 
       "IPv6Address": "" 
      } 
     }, 
     "Options": {}, 
     "Labels": {} 
    } 
] 

, когда я пингую от моего хозяина докера, он работает как ожидалось.

[email protected]: ~$ ping -c 1 192.168.1.34 
PING 192.168.1.34 (192.168.1.34) 56(84) bytes of data. 
64 bytes from 192.168.1.34: icmp_seq=1 ttl=64 time=0.474 ms 

--- 192.168.1.34 ping statistics --- 
1 packets transmitted, 1 received, 0% packet loss, time 0ms 
rtt min/avg/max/mdev = 0.474/0.474/0.474/0.000 ms 

Однако, с удаленного хоста, контейнер не может быть доставлен.

[email protected]: ~$ ping -c 1 192.168.1.34 
PING 192.168.1.34 (192.168.1.34) 56(84) bytes of data. 
From 192.168.1.100 icmp_seq=1 Destination Host Unreachable 

--- 192.168.1.34 ping statistics --- 
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms 

как я должен настроить Docker определенного пользователя сеть или мою локальную сеть, так что я могу Acces контейнера на отдельном внутрибрюшинно адрес?

+0

192.168.0.0 - частная сеть. Чтобы получить доступ к вашему контейнеру с удаленного компьютера, вам необходимо сопоставить порт вашего контейнера с портом вашего сервера с помощью 'docker run -p port-of-server: port-of-container ...'. Чем вы можете получить доступ к своему контейнеру с общедоступным IP-адресом вашего сервера + порта. – lvthillo

+0

Неправильно, ему не нужно отображать порт, как его контейнер как часть моста, и он ведет себя как независимая машина. –

ответ

1

Я ответил сегодня на очень похожий вопрос, не могли бы вы взглянуть на мой ответ здесь и следовать ему, он отлично работает для меня.

Assign LAN IP address to Docker container different from host's IP address

Вот ответ:

Создание Постоянство сетевого моста

Bridge, это устройство (в нашем случае виртуального устройства), который ведет себя аналогично сетевым swiches (работает в основном на сетевом уровне 2), т. Е. Он может подключать два или более сетевых интерфейса к одной и той же локальной сети (LAN), если они имеют одну и ту же подсеть.

Вы собираетесь создать новый мост с постоянством br0 (он будет автоматически запущен при загрузке системы), добавьте в него свой физический сетевой интерфейс (в моем случае это eth0). Обратите внимание, что после добавления интерфейса к мосту интерфейс больше не нужен IP-адрес, потому что мост получит IP-адрес и может использоваться вместо вашего интерфейса, т. Е. Вы можете обмениваться данными с помощью моста, как будто он были вашим физическим интерфейсом, и он пересылает входящие/исходящие пакеты данных в нужное место назначения. Вам не нужно назначать какое-либо оборудование (MAC-адрес) мосту, он автоматически будет использовать MAC-адрес первого добавленного интерфейса.

Предупреждение: Настоятельно рекомендуется не выполнять эти действия удаленно, кроме того, что у вас есть физический доступ к вашему серверу! Вы можете потерять соединение с вашим сервером, если не будете осторожны.

Установка мостов утилита управления:

sudo apt install bridge-utils 

Система не сможет создать мост без bridge-utils пакета.

Чтобы создать сохраняемости мост, редактировать interfaces файл:

sudo vim /etc/network/interfaces 

Добавьте follwing конфигурацию в конце файла (адаптировать их в соответствии с вашими потребностями):

auto br0 
iface br0 inet static 
    bridge_ports eth0 
    address 192.168.1.10 
    netmask 255.255.255.0 
    broadcast 192.168.1.255 
    gateway 192.168.1.1 

Теперь удалить Docker по умолчанию мост docker0, поскольку он не нуждается в нем:

сервис-сценарий запуска

Edit Docker, чтобы использовать мост (br0) вместо используемого по умолчанию моста Docker (в docker0), и передать некоторые важные параметры моста:

Ubuntu:

sudo vim /etc/systemd/multi-user.target.wants/docker.service 

Адаптировать файл, чтобы посмотреть, как это:

[Service] 

ExecStart=/usr/bin/dockerd -H fd:// --bridge=br0 --fixed-cidr=192.168.1.32/27 --default-gateway=192.168.1.1 

Теперь скажите систему об изменениях на этом файле:

sudo systemctl daemon-reload 

Reboot система:

sudo reboot 

Теперь проверьте ваш мост, он должен быть там!

ip addr 

Теперь создать свой контейнер, как сильфон, это приведет, чтобы дать вашему контейнеру исправить IP:

docker run --name myContainer \ 
    -it --restart always --memory 100M \ 
    --network bridge --cap-add NET_ADMIN \ 
    --hostname client1.noureldin.local \ 
    --add-host "client1.noureldin.local client1":192.168.1.123 \ 
    mnoureldin/general-purpose:latest /bin/bash -c " \ 
    ip addr flush dev eth0; \ 
    ip addr add 192.168.1.123/24 brd + dev eth0; \ 
    ip route add default via 192.168.1.1 dev eth0; \ 
    /bin/bash" 

важной часть, связанной с вашими требованиями сетей является:

--network bridge --cap-add NET_ADMIN \ 
    ip addr flush dev eth0; \ 
    ip addr add 192.168.1.123/24 brd + dev eth0; \ 
    ip route add default via 192.168.1.1 dev eth0; \ 

Конечно, вы должны установить в своем контейнере пакеты iproute2 net-tools iputils-ping, чтобы иметь возможность выполнять общие сетевые команды (предоставление фиксированный ip сделан командой ip).

Впервые вы запускаете контейнер, вы не можете заметить любые изменения в IP-адресе, потому что ваш conainer, вероятно, не iproute2 пакет (т.е. не ip команда), просто intall указанные пакеты и затем перезапустите контейнер, и все должно быть точно так, как вы хотите!

Надеюсь, что это поможет.

Смежные вопросы