Почему нельзя получить доступ к приложению, которое развертывается посредством стека докеров в кластере Docker Swarm? - PullRequest
0 голосов
/ 22 мая 2018

В кластере Docker Swarm есть один мастер и два рабочих.

Создание файла yaml на главном хосте:

stack.yml

version: '3.1'

services:

  wordpress:
    image: wordpress
    restart: always
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_PASSWORD: example

  mysql:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example

Развертываниестек по стеку докера

$ docker stack deploy -c stack.yml wordpress

Проверка на главном хосте:

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
f24d160ef788        wordpress:latest    "docker-entrypoint.s…"   19 seconds ago      Up 13 seconds       80/tcp              wordpress_wordpress.1.5rilktpp43xtv1avtmp0uuh0u

# This is I downloaded the images myself:
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
wordpress           latest              c649c99a766e        12 hours ago        408MB
mysql               5.7                 0d16d0a97dd1        2 weeks ago         372MB

$ docker service ls
ID                  NAME                  MODE                REPLICAS            IMAGE               PORTS
ra3wfcq8owmb        wordpress_mysql       replicated          1/1                 mysql:5.7
hosko1vl55wq        wordpress_wordpress   replicated          1/1                 wordpress:latest    *:8080->80/tcp

Проверка на хосте worker1:

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
f91c127d6166        wordpress:latest    "docker-entrypoint.s…"   12 seconds ago      Up 10 seconds       80/tcp              wordpress_wordpress.1.98fkpvprkdjwkdik2hieqcg7g

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
wordpress           <none>              c649c99a766e        12 hours ago        408MB

Проверка на хосте worker2:

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES
6465e16ee5b4        0d16d0a97dd1        "docker-entrypoint.s…"   About a minute ago   Up About a minute   3306/tcp            wordpress_mysql.1.xhrfekxylgycyp0qf6ca7h9ok

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
wordpress           <none>              c649c99a766e        12 hours ago        408MB

Невозможно получить доступ с http://[IP]:8080.

Развернуть его с помощью docker-compose

$ docker-compose -f stack.yml up

Работает очень хорошо.


Вопросы

  • Почему при развертывании с помощью docker stack ... не тянут образы на всех хостах кластера?
  • Почему к нему нельзя получить доступ, а docker-compose способ может?
  • Можно ли также docker-compose развернуть контейнеры на всем кластере Swarm?

См. Журналы обслуживания

(измененный IP-адрес)

$ docker service logs -f wordpress_wordpress
wordpress_wordpress.1.yiowxbsrup5v@ip-1-2-3-4.ap-northeast-1.compute.internal    |
wordpress_wordpress.1.yiowxbsrup5v@ip-1-2-3-4.ap-northeast-1.compute.internal    | Warning: mysqli::__construct(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name or service not known in Standard input code on line 22
wordpress_wordpress.1.yiowxbsrup5v@ip-1-2-3-4.ap-northeast-1.compute.internal    |
wordpress_wordpress.1.yiowxbsrup5v@ip-1-2-3-4.ap-northeast-1.compute.internal    | MySQL Connection Error: (2002) php_network_getaddresses: getaddrinfo failed: Name or service not known
wordpress_wordpress.1.yiowxbsrup5v@ip-1-2-3-4.ap-northeast-1.compute.internal    |
wordpress_wordpress.1.yiowxbsrup5v@ip-1-2-3-4.ap-northeast-1.compute.internal    | Warning: mysqli::__construct(): php_network_getaddresses: getaddrinfo failed: Name or service not known in Standard input code on line 22
wordpress_wordpress.1.yiowxbsrup5v@ip-1-2-3-4.ap-northeast-1.compute.internal    |
wordpress_wordpress.1.yiowxbsrup5v@ip-1-2-3-4.ap-northeast-1.compute.internal    | Warning: mysqli::__construct(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name or service not known in Standard input code on line 22
wordpress_wordpress.1.yiowxbsrup5v@ip-1-2-3-4.ap-northeast-1.compute.internal    |
wordpress_wordpress.1.yiowxbsrup5v@ip-1-2-3-4.ap-northeast-1.compute.internal    | MySQL Connection Error: (2002) php_network_getaddresses: getaddrinfo failed: Name or service not known
wordpress_wordpress.1.ei7e4zio6rj1@ip-1-2-3-5.ap-northeast-1.compute.internal    | WordPress not found in /var/www/html - copying now...
wordpress_wordpress.1.ei7e4zio6rj1@ip-1-2-3-5.ap-northeast-1.compute.internal    | Complete! WordPress has been successfully copied to /var/www/html
wordpress_wordpress.1.ei7e4zio6rj1@ip-1-2-3-5.ap-northeast-1.compute.internal    |
wordpress_wordpress.1.ei7e4zio6rj1@ip-1-2-3-5.ap-northeast-1.compute.internal    | Warning: mysqli::__construct(): php_network_getaddresses: getaddrinfo failed: Name or service not known in Standard input code on line 22
wordpress_wordpress.1.ei7e4zio6rj1@ip-1-2-3-5.ap-northeast-1.compute.internal    |
wordpress_wordpress.1.ei7e4zio6rj1@ip-1-2-3-5.ap-northeast-1.compute.internal    | MySQL Connection Error: (2002) php_network_getaddresses: getaddrinfo failed: Name or service not known
wordpress_wordpress.1.ei7e4zio6rj1@ip-1-2-3-5.ap-northeast-1.compute.internal    |
wordpress_wordpress.1.ei7e4zio6rj1@ip-1-2-3-5.ap-northeast-1.compute.internal    | Warning: mysqli::__construct(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name or service not known in Standard input code on line 22
wordpress_wordpress.1.ei7e4zio6rj1@ip-1-2-3-5.ap-northeast-1.compute.internal    |
wordpress_wordpress.1.ei7e4zio6rj1@ip-1-2-3-5.ap-northeast-1.compute.internal    | Warning: mysqli::__construct(): php_network_getaddresses: getaddrinfo failed: Name or service not known in Standard input code on line 22
wordpress_wordpress.1.ei7e4zio6rj1@ip-1-2-3-5.ap-northeast-1.compute.internal    |
wordpress_wordpress.1.ei7e4zio6rj1@ip-1-2-3-5.ap-northeast-1.compute.internal    | Warning: mysqli::__construct(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name or service not known in Standard input code on line 22
wordpress_wordpress.1.ei7e4zio6rj1@ip-1-2-3-5.ap-northeast-1.compute.internal    |
wordpress_wordpress.1.ei7e4zio6rj1@ip-1-2-3-5.ap-northeast-1.compute.internal    | MySQL Connection Error: (2002) php_network_getaddresses: getaddrinfo failed: Name or service not known
wordpress_wordpress.1.ei7e4zio6rj1@ip-1-2-3-5.ap-northeast-1.compute.internal    |
wordpress_wordpress.1.ei7e4zio6rj1@ip-1-2-3-5.ap-northeast-1.compute.internal    | Warning: mysqli::__construct(): php_network_getaddresses: getaddrinfo failed: Name or service not known in Standard input code on line 22
wordpress_wordpress.1.ei7e4zio6rj1@ip-1-2-3-5.ap-northeast-1.compute.internal    |
wordpress_wordpress.1.ei7e4zio6rj1@ip-1-2-3-5.ap-northeast-1.compute.internal    | Warning: mysqli::__construct(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name or service not known in Standard input code on line 22
wordpress_wordpress.1.ei7e4zio6rj1@ip-1-2-3-5.ap-northeast-1.compute.internal    |
wordpress_wordpress.1.ei7e4zio6rj1@ip-1-2-3-5.ap-northeast-1.compute.internal    | MySQL Connection Error: (2002) php_network_getaddresses: getaddrinfo failed: Name or service not known
wordpress_wordpress.1.ei7e4zio6rj1@ip-1-2-3-5.ap-northeast-1.compute.internal    |
wordpress_wordpress.1.ei7e4zio6rj1@ip-1-2-3-5.ap-northeast-1.compute.internal    | Warning: mysqli::__construct(): php_network_getaddresses: getaddrinfo failed: Name or service not known in Standard input code on line 22
wordpress_wordpress.1.ei7e4zio6rj1@ip-1-2-3-5.ap-northeast-1.compute.internal    |
wordpress_wordpress.1.ei7e4zio6rj1@ip-1-2-3-5.ap-northeast-1.compute.internal    | Warning: mysqli::__construct(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name or service not known in Standard input code on line 22
wordpress_wordpress.1.ei7e4zio6rj1@ip-1-2-3-5.ap-northeast-1.compute.internal    |
wordpress_wordpress.1.ei7e4zio6rj1@ip-1-2-3-5.ap-northeast-1.compute.internal    | MySQL Connection Error: (2002) php_network_getaddresses: getaddrinfo failed: Name or service not known

Не могу подключиться к mysql.

...