Контейнер Docker, подключение друг к другу баз данных, прокси-сервер Nginx и WordPress

#wordpress #docker #nginx #docker-compose

#wordpress #docker #nginx #docker-compose

Вопрос:

Я пытаюсь понять, как работает сеть docker и тому подобное. Итак, вот моя настройка, у меня есть 2 контейнера docker с WordPress и mysql. И эти двое должны иметь возможность общаться друг с другом через прямые подключения к базе данных. И у меня также есть домен, на который они указывают. Итак, я попытался настроить его с помощью прокси-сервера docker nginx, но когда я пытаюсь посетить этот сайт через домен, я получаю шлюз 502 bat.

Итак, мой файл компоновки прокси-сервера docker ngxinx выглядит следующим образом, но с разными портами:

 version: "3.1"
services:
  nginx-proxy:
    image: jwilder/nginx-proxy:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./certs:/etc/nginx/certs
      - /var/run/docker.sock:/tmp/docker.sock:ro
    restart: unless-stopped
networks:
  default:
    external:
      name: nginx-proxy
 

И оба моих контейнера WordPress выглядят так:

 version: '3.1'

services:

  wordpress:
    image: wordpress
    restart: always
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: exampledb
      VIRTUAL_HOST: wp1.local
      VIRTUAL_PORT: 3000
    volumes:
      - ./wp:/var/www/html
      - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
    expose:
      - 3000

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - db:/var/lib/mysql
    ports:
      - "8086:3306"

  mailhog:
    image: mailhog/mailhog
    ports:
      - "1025:1025" # smtp server
      - "8025:8025" # web ui

networks:
  default:
    external:
      name: nginx-proxy

volumes:
  db:
 

И я добавил 127.0.0.1 wp1 в /etc/hosts

Но когда я запускаю прокси и один из контейнеров WP, я получаю плохой шлюз. И я понятия не имею, как двигаться дальше. И, возможно, это даже не правильный способ сделать это. Потому что проблема, которую я пытаюсь решить, заключается в том, что wp2 должен иметь возможность подключаться к базе данных wp1 через пользовательское pdo-соединение.

Я пытался объяснить как можно лучше, но это новая область для меня, когда дело доходит до сетей docker. Также я использую docker для Windows с wsl2

Ответ №1:

Вы должны добавить

 networks: 
 - default
 

для каждого определения службы в docker-compose.

 version: '3.1'    

services:

  wordpress:
    image: wordpress
    restart: always
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: exampledb
      VIRTUAL_HOST: wp1.local
      VIRTUAL_PORT: 3000
    volumes:
      - ./wp:/var/www/html
      - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
    expose:
      - 3000
    networks:
      - default

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - db:/var/lib/mysql
    ports:
      - "8086:3306"
    networks:
      -default

  mailhog:
    image: mailhog/mailhog
    ports:
      - "1025:1025" # smtp server
      - "8025:8025" # web ui
    networks:
      - default

networks:
  default:
    external:
      name: nginx-proxy

volumes:
  db: