我想运行我的 Wordpress
网站上Docker
,我想连接Wordpress
数据库到另一个容器,其中只有我所有站点的数据库。
为此,我创建了一个 LAMP
容器使用以下 docker-compose.yml
:
version: "3"
services:
web:
image: webdevops/php-apache:alpine-php7
ports:
- "4500:80"
volumes:
- ./www:/app
- ./uploads.ini:/opt/docker/etc/php/php.ini
db:
image: mysql
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
ports:
- "3306:3306"
phpmyadmin:
image: phpmyadmin/phpmyadmin
environment:
MYSQL_ROOT_PASSWORD: root
ports:
- "8088:80"
如您所见,我已安装 Apache
作为服务使用 webdevops
图像,这将返回以下内容:然后,我创建了一个新容器,其中包含
Wordpress
实例:version: '3'
services:
wordpress:
depends_on:
- db
image: wordpress:latest
volumes:
- ./wp/wp-content:/var/www/html/wp-content
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: lamp_db_1:3306
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: root
volumes:
dbdata:
wp-content:
如您所见,我安装了 wp-content
文件夹,因为我已经安装了带有插件和媒体的 Wordpress...然后我尝试将此容器连接到 lamp_db_1
容器,但是当我使用以下命令运行它时:docker-compose up --build
我得到:MySQL Connection Error: (2002) php_network_getaddresses: getaddrinfo failed: Name or service not known
我做错了什么?
如何将 wordpress 容器连接到
LAMP
容器?
最佳答案
您可以指定一个 custom network在您的 LAMP
堆叠并拥有您的 Wordpress
堆栈和其他 Compose 文件中定义的其他容器通过使用 network.external
使用此网络Compose 中的参数。
在同一个网络上,您将能够加入您的 lamp_db
容器using it's container name作为主机名。
一个完整的例子:docker-compose.yml
为 LAMP
堆:
version: '3.5'
services:
db:
# This will be the hostname for your DB container on the network
container_name: lamp_db
image: mysql
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: root
# Have db container join our db network
networks:
- db_network
# Ensure our custom network is managed by this stack
networks:
db_network:
name: db_network
docker-compose.yml
为 Wordpress
堆:version: '3.5'
services:
wordpress:
image: wordpress:latest
ports:
- "8000:80"
environment:
# Name of the db container
WORDPRESS_DB_HOST: lamp_db:3306
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: root
# Have wordpress container join our db network
networks:
- db_network
# Declare db_network as external with it's name
# Network won't be created by this stack but must exists before running
# See https://docs.docker.com/compose/compose-file/#external-1
networks:
db_network:
external: true
name: db_network
以及需要使用我们的数据库的任何服务的通用示例:version: '3.5'
services:
some_container:
image: some-image:latest
# Have this container join our db network
networks:
- db_network
# Note: make sure to reference db container by it's hostname lamp_db
networks:
db_network:
external: true
name: db_network
笔记:db_network
通过 LAMP
管理堆。当up
正在LAMP
堆栈,Docker Compose 将确保创建此网络。使用此网络的其他堆栈应将其声明为 external: true
与它的名字 version: '3.5'
或更多才能使用network.name
配置关于php - 无法在外部 dbgetaddrinfo 上连接 Wordpress 失败 : Name or service not known,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64043043/