无法在外部 dbgetaddrinfo 上连接 Wordpress 失败:名称或服务未知

sfa*_*oso 5 php apache wordpress docker

我想在 上运行我的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"
Run Code Online (Sandbox Code Playgroud)

如您所见,我已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:
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我安装了该wp-content文件夹,因为我已经安装了带有插件和媒体的 Wordpress……然后我尝试将此容器连接到lamp_db_1容器,但是当我使用以下命令运行它时:

docker-compose up --build
Run Code Online (Sandbox Code Playgroud)

我得到:

MySQL 连接错误:(2002) php_network_getaddresses:getaddrinfo 失败:名称或服务未知

我做错了什么?

如何将wordpress容器连接到LAMP容器?

Pie*_* B. 2

您可以在堆栈中指定自定义网络LAMP,并让您的Wordpress堆栈和其他 Compose 文件中定义的其他容器通过使用network.externalCompose 中的参数来使用此网络。

在同一网络上,您将能够使用容器名称lamp_db作为主机名来加入容器。


一个完整的例子:

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

任何需要使用我们数据库的服务的通用示例:

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
Run Code Online (Sandbox Code Playgroud)

笔记:

  • db_network通过堆栈进行管理LAMP。当up使用LAMP堆栈时,Docker Compose 将确保创建该网络。使用此网络的其他堆栈应external: true使用其名称来声明它
  • 您需要version: '3.5'或更多才能使用network.name配置