Подтвердить что ты не робот

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

Я пытаюсь использовать Docker API для подключения к демону 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
4b9b3361

Ответ 1

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

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

начнет прослушивание докеров, прослушивая любой IP-адрес вашего хоста, а также типичный сокет unix.

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

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-ADDRESS - можно использовать любой доступный адрес.

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

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