php - 无法在外部 dbgetaddrinfo 上连接 Wordpress 失败 : Name or service not known

标签 php wordpress apache 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"
如您所见,我已安装 Apache作为服务使用 webdevops图像,这将返回以下内容:
enter image description here
然后,我创建了一个新容器,其中包含 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.ymlLAMP堆:

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.ymlWordpress堆:
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/

    相关文章:

    php - 如何优化php进程内存占用?

    php - 在 httpd.conf 中设置 PHP 变量?

    apache - 阻止 "cloner"服务器从我们的服务器渲染内容

    php - 如果没有错误如何提交表单?

    php - 如何运行批处理?

    PHP 将查询字符串传递到另一个页面

    php - 在我的情况下如何组合多个查询(选择语句)?

    php - 在 woocommerce 属性中添加自定义字段

    css - 当子菜单链接处于事件状态时突出显示 WordPress 父菜单项

    php - Redis 用于部署在 Apache httpd 上的 symfony 应用程序的 session 处理