Не удается подключиться к контейнеру докер-машины в digitalocean

У меня есть контейнер сервлета Java, работающий в edge_web_1, к которому я могу получить доступ через порт 8080, и я не могу получить доступ к 80 или 443 через edge_nginx_1. Любые идеи?

# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                      NAMES
99c26fe2117e        nginx:1             "nginx -g 'daemon ..."   27 minutes ago      Up 27 minutes       0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   edge_nginx_1
571ef4787dbc        edge_web            "/tmp/entrypoint.sh"     27 minutes ago      Up 27 minutes       0.0.0.0:8080->8080/tcp                     edge_web_1
7f0c15522a70        mongo:3             "/entrypoint.sh mo..."   58 minutes ago      Up 27 minutes       27017/tcp                                  edge_db_1

С хоста докера:

# curl localhost:8080
{"code":404,"message":"HTTP 404 Not Found"}

(Ответ json означает, что я дошел до контейнера сервлета, для этого подходит 404).

# curl localhost:80
curl: (52) Empty reply from server

Я получаю то же самое для 443. Я пытался использовать 18080 вместо 80 на случай, если это связано с привилегированными портами. Хост создается с помощью докер-машины с драйвером digitalocean. Контейнеры настроены с помощью docker-compose, и все это работает как локально, так и с драйвером виртуального бокса.

Любопытно (для меня), что на виртуальной машине docker-machine все настроено для работы от имени пользователя докера, в digitalocean, похоже, он работает от имени пользователя root. Правила iptables тоже сильно отличаются, но правила digitalocean для 80 ничем не отличаются от 8080.

# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy DROP)
target     prot opt source               destination
DOCKER-ISOLATION  all  --  0.0.0.0/0            0.0.0.0/0
DOCKER     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain DOCKER (1 references)
target     prot opt source               destination
ACCEPT     tcp  --  0.0.0.0/0            172.17.0.4           tcp dpt:8080
ACCEPT     tcp  --  0.0.0.0/0            172.17.0.3           tcp dpt:443
ACCEPT     tcp  --  0.0.0.0/0            172.17.0.3           tcp dpt:80

Chain DOCKER-ISOLATION (1 references)
target     prot opt source               destination
RETURN     all  --  0.0.0.0/0            0.0.0.0/0

Расчетное время прибытия:

Кажется, это связано с тем, что экземпляр докер-машины digitalocean не обрабатывает тома. Глядя на контейнер nginx, он не содержит файлов из томов. Я могу воспроизвести его только с помощью этих:

докер-compose.yml

nginx:
  image: nginx:1
  ports:
    - "80:80"
  volumes:
    - ./testconf:/etc/nginx/conf.d
    - ./testhtml:/usr/share/nginx/html

testconf/nginx.conf

server {
  listen        80;
  server_name _;

  location / {
    root /usr/share/nginx/html;

    try_files $uri $uri/ @proxy;
  }
}

testhtml/index.html

<!DOCTYPE html>
<html>
  <body>
    <p>Hello</p>
  </body>
</html>

person rich    schedule 06.02.2017    source источник


Ответы (1)


По-видимому, ожидается, что это будет работать локально, в виртуальном боксе, а не при развертывании в DO или, я думаю, в EC2.

Мне это кажется немного ерундой, не говоря уже о неожиданности.

https://github.com/docker/machine/issues/3982

person rich    schedule 07.02.2017