Назад | Перейти на главную страницу

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

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

У меня есть следующие 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 развертывание -c stack.yml abtehnic

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

CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES
256e65fe2c4c        mysql:latest        "docker-entrypoint..."   About a minute ago   Up About a minute   3306/tcp            abtehnic_db.1.mo0xp17adt2jocu9yivkzg19g
26481d8bab95        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 22

Warning: mysqli::mysqli(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name or service not known in - on line 22

MySQL Connection Error: (2002) php_network_getaddresses: getaddrinfo failed: Name or service not known

Warning: mysqli::mysqli(): (HY000/2002): Connection refused in - on line 22

MySQL Connection Error: (2002) Connection refused

Warning: mysqli::mysqli(): (HY000/2002): Connection refused in - on line 22

MySQL Connection Error: (2002) Connection refused

MySQL Connection Error: (2002) Connection refused

Warning: mysqli::mysqli(): (HY000/2002): Connection refused in - on line 22
AH00558: 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
AH00558: 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. Вам нужно указать докеру, чтобы он связал db контейнер из wordpress контейнер для ссылки на него по имени.

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

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

links:
  - db

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

# docker run -d -p 80:80 wordpress
dc9e4aab1015eb5d82cf489e2943d76084faceaf3093bc3238964d6cfa81ab1c
# docker port dc9e4aab1015eb5d82cf489e2943d76084faceaf3093bc3238964d6cfa81ab1c
80/tcp -> 0.0.0.0:80
# 

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

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