Как подключиться к Docker API с другой машины?



Я пытаюсь использовать API Docker для подключения к демону docker с другой машины. Я могу успешно выполнить эту команду:



docker -H=tcp://127.0.0.1:4243 images


Но не тогда, когда я использую реальный IP-адрес:



docker -H=tcp://192.168.2.123:4243 images
2013/08/04 01:35:53 dial tcp 192.168.2.123:4243: connection refused


Почему я не могу подключиться, используя нелокальный IP?



Я использую Vagrant VM со следующим в Vagrantfile: config.vm.network :private_network, ip: "192.168.2.123"



Следующие iptables:



# Generated by iptables-save v1.4.12 on Sun Aug  4 01:24:46 2013
*filter
:INPUT ACCEPT [1974:252013]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1511:932565]
-A INPUT -p tcp -m tcp --dport 4243 -j ACCEPT
COMMIT
# Completed on Sun Aug 4 01:24:46 2013
# Generated by iptables-save v1.4.12 on Sun Aug 4 01:24:46 2013
*nat
:PREROUTING ACCEPT [118:8562]
:INPUT ACCEPT [91:6204]
:OUTPUT ACCEPT [102:7211]
:POSTROUTING ACCEPT [102:7211]
:DOCKER - [0:0]
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.16.42.0/24 ! -d 172.16.42.0/24 -j MASQUERADE
607   4  

4 ответов:

Столкнулся с подобной проблемой, одна вещь, которую я здесь не вижу, это то, что вам нужно запустить docker, чтобы слушать как сеть, так и сокет unix. Все обычные команды docker (командной строки) на хосте принимают сокет.

sudo docker -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock -d &

Запустит docker, прослушивающий любой ip-адрес на вашем хосте,а также типичный сокет unix.

Вам нужно прослушать 0.0.0.0. Когда вы слушаете 127.0.0.1, это означает, что никто за пределами вашего хоста не сможет подключиться.

Обратите внимание, что при этом вы предоставили любому пользователю и любому URL, отправленному вам по электронной почте, доступ к API Docker и, следовательно, разрешение root.

Вы должны, как минимум, защитить свой сокет с помощью https: http://docs.docker.com/articles/https/

Существует 2 способа настройки порта docker daemon

1) Настройка в файле /etc/default/docker:

DOCKER_OPTS="-H tcp://127.0.0.1:5000 -H unix:///var/run/docker.sock"

2) Настройка в /etc / docker / daemon.json:

{
"hosts": ["tcp://<IP-ADDRESS>:<PORT>", "unix:///var/run/docker.sock"]
}

IP-адрес-может использоваться любой доступный адрес.

Перезагрузите службу docker после настройки порта.

Причина добавления обоих пользовательских портов [tcp://127.0.0.1:5000] и окно настройки по умолчанию сокет [unix:// / var / run / docker.sock] заключается в том, что пользовательский порт обеспечивает доступ к API docker, тогда как сокет по умолчанию включает CLI.

Comments

    Ничего не найдено.