Невозможно получить доступ к сайту Wordpress, созданному как стек Docker

Я пытаюсь создать сайт Wordpress внутри стека Docker, состоящего из следующих сервисов:

  • wordpress - сам сайт Wordpress
  • db - контейнер MySQL

У меня есть следующее stack.yml файл:

version: '3.1'networks:  abtehnic:services:  db:    image: mysql:latest    restart: always    networks:      - abtehnic    environment:      MYSQL_ROOT_PASSWORD: XXXXX      MYSQL_DATABASE: wordpress      MYSQL_USER: wordpress      MYSQL_PASSWORD: barbu123  wordpress:    image: abtehnic-wordpress    depends_on:      - db    restart: always    ports:      - 80    environment:      WORDPRESS_DB_HOST: db:3306      WORDPRESS_DB_USER: wordpress      WORDPRESS_DB_PASSWORD: wordpress      WORDPRESS_DB_PASSWORD: barbu123    networks:      - abtehnic    volumes:      - ./source:/var/www/html

Я развертываю стек с помощью следующей команды:

$ docker stack deploy -c stack.yml abtehnic

То docker ps команда выводит следующее:

CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES256e65fe2c4c        mysql:latest        "docker-entrypoint..."   About a minute ago   Up About a minute   3306/tcp            abtehnic_db.1.mo0xp17adt2jocu9yivkzg19g26481d8bab95        wordpress:4.8       "docker-entrypoint..."   About a minute ago   Up About a minute   80/tcp              abtehnic_wordpress.1.tiikrjwm1kcmxjg7v74vrcquw

Я пытаюсь выяснить подключенный порт через:

$ docker port <container_id for wordpress>

и его выходные данные пусты. Также, когда я бегу docker logs <container_id_for_wordpress> Я получаю следующее:

Warning: mysqli::mysqli(): php_network_getaddresses: getaddrinfo failed: Name or service not known in - on line 22Warning: mysqli::mysqli(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name or service not known in - on line 22MySQL Connection Error: (2002) php_network_getaddresses: getaddrinfo failed: Name or service not knownWarning: mysqli::mysqli(): (HY000/2002): Connection refused in - on line 22MySQL Connection Error: (2002) Connection refusedWarning: mysqli::mysqli(): (HY000/2002): Connection refused in - on line 22MySQL Connection Error: (2002) Connection refusedMySQL Connection Error: (2002) Connection refusedWarning: mysqli::mysqli(): (HY000/2002): Connection refused in - on line 22AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 10.0.1.3. Set the 'ServerName' directive globally to suppress this messageAH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 10.0.1.3. Set the 'ServerName' directive globally to suppress this message[Sat Oct 28 16:05:32.189285 2017] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.10 (Debian) PHP/5.6.31 configured -- resuming normal operations[Sat Oct 28 16:05:32.189321 2017] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'

Вот мои вопросы:

  1. Почему не может wordpress контейнерный доступ к db контейнер?
  2. Почему нет никакого порта, который я мог бы использовать для доступа к сайту Wordpress с моего хостинга?
depends_on:  - db

Это просто гарантирует, что контейнер базы данных полностью загружен перед контейнером wordpress. Вам нужно сказать docker, чтобы он связал db контейнер из wordpress контейнер, чтобы ссылаться на него по имени.

Что docker-compose делает под капотом, так это принимает ip-адрес, который docker дает db контейнер и добавьте /etc/hosts вход в wordpress контейнер, чтобы вы могли ссылаться на него по имени.

Так что попробуйте добавить это в раздел wordpress

links:  - db

Я предполагаю, что вы делаете что-то вроде docker port 26481d8bab95, согласно вашему вопросу, вы определили порт 80, поэтому ваш ответ - порт 80:

# docker run -d -p 80:80 wordpressdc9e4aab1015eb5d82cf489e2943d76084faceaf3093bc3238964d6cfa81ab1c# docker port dc9e4aab1015eb5d82cf489e2943d76084faceaf3093bc3238964d6cfa81ab1c80/tcp -> 0.0.0.0:80# 

стек или нет, вы все равно должны иметь возможность использовать docker port

  1. mysqld требуется больше времени, чтобы начать сравнивать с httpd (wordpress), вот почему вы видите ошибки
  2. с точки зрения docker, он настроен правильно, и фактической причиной, по которой вы не можете получить к нему доступ, может быть множество, брандмауэр и тому подобное.

Проверьте журналы службы базы данных, чтобы убедиться, что она запущена: docker logs abtehnic_db.1.mo0xp17adt2jocu9yivkzg19g