Как подключиться к 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
Ответы
Ответ 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.