我想使用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
,并使用来自{{1}的sql来为一定数量的数据初始化网站}。
与siteB相同。
我知道我可以在./siteA/mysql/setup.sql
的mysql部分中指定-
WORDPRESS_DB_NAME: example_a
和- ./db-data/mysql.dump.sql:/docker-entrypoint-initdb.d/install_wordpress.sql
之类的数据库和卷,但我只有一个共享的mysql,不能为每个站点指定数据库和卷。
我有多个docker-compose.yml
文件,如下所示。
./共享/搬运工-compose.yml
docker-compose.yml
./站点A /搬运工-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
./站点B /搬运工-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
答案 0 :(得分:0)
您是否尝试在wp_config.php中设置表前缀
$ table_prefix ='您的用户名_';
这应该可以解决两个站点上只有一个数据库连接的问题。
答案 1 :(得分:0)
是的,您可以将多个WordPress实例安装到一个数据库中。您只需在安装时更改每次安装的数据库前缀。只需检查您的wp-config并更改前缀和数据库凭据即可。
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'database_name_here');
/** MySQL database username */
define('DB_USER', 'username_here');
/** MySQL database password */
define('DB_PASSWORD', 'password_here');
/** MySQL hostname */
define('DB_HOST', 'localhost');
/** Database Charset to use in creating database tables. */
define('DB_CHARSET', 'utf8');
/** The Database Collate type. Don't change this if in doubt. */
define('DB_COLLATE', '');