LINUX.ORG.RU

Помоги разобраться с Docker API в VirtualBox

 , , ,


0

1

Приветствую господа.

Помоги разобраться в следующей проблеме:

Есть Windows машина на которой установлен VirtualBox, а в нем крутится виртуальная машина на Centos 7.
Сеть в машине настроена через «Виртуальный адаптер».
В самой машине установлен docker и поднят один контейнер с простым web приложением на python, который слушает на машине 5000 порт и при получении запроса отдает простую html страницу.

Если на win тачке отправить http запрос на ip_вир_машины:5000 то он вернет html страницу как надо.

В самом docker’е включен «Docker API». Включен он при помощи вот такого простого конфига:

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock

Сам конфиг расположен по пути /etc/systemd/system/docker.service.d/remote-api.conf.
Если в самой виртуалки обратиться к api, то он возвращает ответ без проблем (curl http://0.0.0.0:2376/images/json).
Но если попытается с win машины обратится к api http://ip_вир_машины:2376/images/json то вылетает сообщение об ошибке (time out)

Кто нибудь может подсказать в чем проблема и как ее можно исправить?

Решение проблемы:
В centos фаерволом был закрыт порт 2376 и из за этого собственного вылетал time out.
Волшебные команды которые открывают порт:

firewall-cmd --add-port=2376/tcp
firewall-cmd --add-port=2376/tcp --permanent
Спасибо sanwashere и staseg за помощь!



Последнее исправление: cetjs2 (всего исправлений: 4)

Сперва удостоверься, что докер подхватил настройки.

`ps aux | grep docker` — чтобы посмотреть с какими опциями запущен демон

`netstat -nplt` — чтобы удостовериться, что он слушает 0.0.0.0:2376 и ни с кем не конфликтует.

staseg ★★★★★
()
Ответ на: комментарий от staseg

`ps aux | grep docker` — чтобы посмотреть с какими опциями запущен демон

[oleg@localhost /]$ ps aux | grep docker
root      3022  0.0  1.5 538512 29336 ?        Ssl  19:47   0:05 /usr/bin/dockerd -H tcp://localhost:2376 -H unix:///var/run/docker.sock
root      3028  0.0  0.4 365228  9076 ?        Ssl  19:47   0:02 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --shim docker-containerd-shim --runtime docker-runc
root      3152  0.0  0.2 272404  3936 ?        Sl   19:47   0:00 docker-containerd-shim f91a88599ec3b364e55087c9115cd46476a036cfe334267776434b1e08afc705 /var/run/docker/libcontainerd/f91a88599ec3b364e55087c9115cd46476a036cfe334267776434b1e08afc705 docker-runc
root      3167  0.0  0.0  42588  1592 ?        Sl   19:47   0:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 5000 -container-ip 172.18.0.2 -container-port 5000
root      3185  0.0  0.1 280600  1916 ?        Sl   19:47   0:00 docker-containerd-shim bab6b1c6dbd23306f770220368bdb8382977505cb71d37206d4899ab114c4246 /var/run/docker/libcontainerd/bab6b1c6dbd23306f770220368bdb8382977505cb71d37206d4899ab114c4246 docker-runc
oleg      5353  0.0  0.0 112652   964 pts/0    S+   21:50   0:00 grep --color=auto docker

`netstat -nplt` — чтобы удостовериться, что он слушает 0.0.0.0:2376 и ни с кем не конфликтует.

[oleg@localhost /]$ netstat -nplt
(No info could be read for "-p": geteuid()=1000 but you should be root.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:2376          0.0.0.0:*               LISTEN      -
tcp6       0      0 :::22                   :::*                    LISTEN      -
tcp6       0      0 ::1:25                  :::*                    LISTEN      -
tcp6       0      0 :::5000                 :::*                    LISTEN      -
Oleg-san
() автор топика
Ответ на: комментарий от staseg

Рестарт не помог, все так же вылетает time out при попытке получить ответ по http с win машины (http://ip_машинны:2376/images/json), при этом если в консоле centos выполнить то все ок: curl http://0.0.0.0:2376/images/json или http://localhost:2376/images/json


[oleg@localhost ~]$ netstat -nplt
(No info could be read for "-p": geteuid()=1000 but you should be root.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      -
tcp6       0      0 :::22                   :::*                    LISTEN      -
tcp6       0      0 ::1:25                  :::*                    LISTEN      -
tcp6       0      0 :::5000                 :::*                    LISTEN      -
tcp6       0      0 :::2376                 :::*                    LISTEN      -
[\code]

Oleg-san
() автор топика
Ответ на: комментарий от Oleg-san

Теперь, похоже, докер запущен правильно, слушает нужный адрес. Проблема может быть с фаерволами на виртуалке и хосте или каких-то специфичных настройках сети в virtualbox.

Начать можно с того, чтобы убедиться, что пакеты, отправляемые с винды, приходят хоть на какой-нибудь сетевой интерфейс линукса (man tcpdump).

staseg ★★★★★
()
Ответ на: комментарий от Oleg-san
firewall-cmd --add-port=2376/tcp


ну и

firewall-cmd --add-port=2376/tcp --permanent
если нужно закрепление результата.

sanwashere ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.