No se puede acceder al sitio de Wordpress creado como una pila de Docker

Estoy tratando de crear un sitio de Wordpress dentro de una pila de Docker compuesta por los siguientes servicios:

  • wordpress - el sitio de WordPress en sí
  • db - el contenedor MySQL

Tengo lo siguiente stack.yml file:

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

Despliego la pila con el siguiente comando:

deploy pila de docker deploy-pila de c.yml abtehnic

El docker ps el comando genera lo siguiente:

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

Estoy tratando de averiguar el puerto asignado a través de:

$ docker port <container_id for wordpress>

y su salida está vacía. También cuando estoy corriendo docker logs <container_id_for_wordpress> Obtengo lo siguiente:

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'

Aquí están mis preguntas:

  1. Por qué no puede el wordpress acceso al contenedor db contenedor?
  2. ¿Por qué no hay ningún puerto que pueda usar para acceder al sitio de WordPress desde mi host?
depends_on:  - db

Eso solo asegura que el contenedor de la base de datos esté completamente cargado antes que el contenedor de WordPress. Necesita decirle a Docker que vincule el db contenedor de la wordpress contenedor para hacer referencia a él por su nombre.

Lo que docker-compose hace bajo el capó es tomar la ip que docker le da al db contenedor y añadir un /etc/hosts entrada a la wordpress contenedor para que pueda hacer referencia a él por su nombre.

Así que intente agregar esto a la sección de WordPress

links:  - db

Asumiré que estás haciendo algo como docker port 26481d8bab95, según su pregunta, definió el puerto 80, por lo que su respuesta es el puerto 80:

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

apilar o no, aún debería poder usar docker port

  1. mysqld tarda más en comenzar a compararse con httpd (wordpress), por eso estás viendo errores
  2. en cuanto a docker, está configurado correctamente y la razón real por la que no puede acceder a él podría ser muchos, firewall y demás.

Verifique los registros del servicio de base de datos para asegurarse de que se inició: docker logs abtehnic_db.1. mo0xp17adt2jocu9yivkzg19g