使用Docker的多个WordPress站点和一个共享数据库

Ryo*_*shi 9 mysql wordpress docker dockerfile docker-compose

我想使用docker在一个共享数据库中运行多个WordPress网站.

是否可以指定数据库并为某个sql文件设置适当的卷,以便为其docker-compose.yml文件中的每个容器初始化WordPress ?


例如,我有三个docker-compose.yml文件用于共享容器,siteA和siteB.

当我运行docker-compose up./shared,将为这两个站点(example_a和example_b)创建两个DB.

当我运行docker-compose up./siteA,我想将当前的数据库更改为example_a,并通过sql volumed从一定数量的数据初始化站点./siteA/mysql/setup.sql.

siteB也是如此.

我知道我可以指定一个数据库和体积像- WORDPRESS_DB_NAME: example_a- ./db-data/mysql.dump.sql:/docker-entrypoint-initdb.d/install_wordpress.sql在MySQL的部分docker-compose.yml,但我只有一个共享MySQL并不能指定DB和体积为每个站点.


我有多个docker-compose.yml文件看起来像下面.

./shared/docker-compose.yml

version: "2"

services:

  proxy:
    image: jwilder/nginx-proxy
    privileged: true
    container_name: proxy
    ports:
      - 80:80
      - 443:443
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./certs:/etc/nginx/certs:ro
    restart: always
    logging:
      options:
        max-size: 5m
        max-file: "10"

  mysql:
    image: mysql:5.7
    container_name: mysql
    command: >
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --max-allowed-packet=128M
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=foobar
    restart: always
    volumes:
      - db-data:/var/lib/mysql
      - ./mysql/sql-setup.sql:/docker-entrypoint-initdb.d/sql-setup.sql # to create multiple databases (e.g. example_a, example_b)
    logging:
      options:
        max-size: 5m
        max-file: "10"

volumes:
  db-data:
    driver: local

networks:
  default:
    external:
      name: shared
Run Code Online (Sandbox Code Playgroud)

./siteA/docker-compose.yml

version: "2"

services:
  example_a_wordpress:
    image: wordpress
    container_name: a.example
    environment:
      WORDPRESS_DB_NAME=example_a
      WORDPRESS_DB_PASSWORD=foobar
      VIRTUAL_HOST: a.example.dev
    external_links:
      - mysql
    restart: always
    volumes:
      - ./dist/theme:/var/www/html/wp-content/themes/main
      - ./dist/assets:/var/www/html/assets
    logging:
      options:
        max-size: 5m
        max-file: "10"

networks:
  default:
    external:
      name: shared
Run Code Online (Sandbox Code Playgroud)

./siteB/docker-compose.yml

version: "2"

services:
  example_b_wordpress:
    image: wordpress
    container_name: b.example
    environment:
    WORDPRESS_DB_NAME=example_b
    WORDPRESS_DB_PASSWORD=foobar
      VIRTUAL_HOST: b.example.dev
    external_links:
      - mysql
    restart: always
    volumes:
      - ./dist/theme:/var/www/html/wp-content/themes/main
      - ./dist/assets:/var/www/html/assets
    logging:
      options:
        max-size: 5m
        max-file: "10"

networks:
  default:
    external:
      name: shared
Run Code Online (Sandbox Code Playgroud)

小智 0

您是否尝试在中设置表前缀wp_config.php

$table_prefix  = 'yourcustomname_';
Run Code Online (Sandbox Code Playgroud)

这应该可以解决两个站点上一个数据库连接的问题。