官方 WordPress Docker 镜像页面的示例(实际时间为 2024 年底):
services:
wordpress:
image: wordpress
restart: always
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: exampleuser
WORDPRESS_DB_PASSWORD: examplepass
WORDPRESS_DB_NAME: exampledb
volumes:
- wordpress:/var/www/html
db:
image: mysql:8.0
restart: always
environment:
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- db:/var/lib/mysql
volumes:
wordpress:
db:
我的预设接近这个:
services:
WordPress:
container_name: Example-WordPressHomePage-WordPress
image: wordpress:6.7.1-php8.1-apache
ports:
- 80:80
volumes:
- ./wordpress:/var/www/html
restart: always
environment:
- WORDPRESS_DB_HOST=db
- WORDPRESS_DB_USER=wordpress
- WORDPRESS_DB_PASSWORD=wordpress
- WORDPRESS_DB_NAME=wordpress
Database:
container_name: Example-WordPressHomePage-Database
image: mysql:8.4.3
volumes:
- ./database:/var/lib/mysql
restart: always
environment:
- MYSQL_ROOT_PASSWORD=somewordpress
- MYSQL_DATABASE=wordpress
- MYSQL_USER=wordpress
- MYSQL_PASSWORD=wordpress
expose:
- 3306
- 33060
目前WordPress无法连接数据库:
但是,通过 IntelliJ IDEA 工具直接连接也不起作用:
我想,上面的预设对于 mysql:8.4.3 图像来说是不够的。 还需要做什么?
在 Compose 中,您使用服务名称作为主机名。您已将
db
重命名为 Database
,因此您还必须使用 WORDPRESS_DB_HOST=Database
。
我建议您使用小写名称,因为 Linux 区分大小写,如果您一直使用小写,您会得到更少的错误。
无法从 IntelliJ 连接的原因是您没有将主机端口映射到 MySQL 容器。
expose
不这样做。如果您希望能够从 Docker 网络外部访问它,您需要使用 ports
指令映射端口 3306,就像在 Wordpress 容器上所做的那样。
这样的东西应该效果更好
WordPress:
container_name: Example-WordPressHomePage-WordPress
image: wordpress:6.7.1-php8.1-apache
ports:
- 80:80
volumes:
- ./wordpress:/var/www/html
restart: always
environment:
- WORDPRESS_DB_HOST=Database
- WORDPRESS_DB_USER=wordpress
- WORDPRESS_DB_PASSWORD=wordpress
- WORDPRESS_DB_NAME=wordpress
Database:
container_name: Example-WordPressHomePage-Database
image: mysql:8.4.3
volumes:
- ./database:/var/lib/mysql
restart: always
environment:
- MYSQL_ROOT_PASSWORD=somewordpress
- MYSQL_DATABASE=wordpress
- MYSQL_USER=wordpress
- MYSQL_PASSWORD=wordpress
ports:
- 3306:3306