首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法连接外部dbgetaddrinfo上的Wordpress :名称或服务未知

无法连接外部dbgetaddrinfo上的Wordpress :名称或服务未知
EN

Stack Overflow用户
提问于 2020-09-24 09:01:31
回答 2查看 581关注 0票数 5

我想在Docker上运行我的Docker站点,并且我想将Wordpress数据库连接到另一个容器,它只有我所有站点的数据库。

为此,我使用以下LAMP创建了一个docker-compose.yml容器

代码语言:javascript
复制
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实例的新容器:

代码语言:javascript
复制
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容器,但是当我运行这个容器时,我使用:

代码语言:javascript
复制
docker-compose up --build

我得到:

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

我做错了什么?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-01 11:54:31

您可以在自定义网络堆栈中指定LAMP,并在其他撰写文件中定义Wordpress堆栈和其他容器,在撰写中使用network.external参数使用该网络。

在同一个网络中,您可以将lamp_db容器使用它的容器名称作为主机名加入。

一个完整的例子:

docker-compose.yml用于LAMP堆栈:

代码语言:javascript
复制
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堆栈:

代码语言:javascript
复制
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

还有一个通用示例--任何需要使用我们的数据库的服务:

代码语言:javascript
复制
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堆栈进行管理。当upLAMP堆栈中运行时,Docker将确保创建此网络。其他使用这个网络的堆栈应该用它的名字声明它为external: true
  • 您需要version: '3.5'或更多才能使用network.name配置
票数 2
EN

Stack Overflow用户

发布于 2020-09-25 07:50:26

您遇到此问题的原因似乎是因为您有两个独立的服务。一个包含您的灯堆栈,另一个包含您的wordpress图像。

当您运行docker时,它为您的应用程序设置一个单网。因此,wordpress图像与您的灯堆栈不在同一网络上。

您可以将wordpress容器添加到LAMP停靠库-Compose.yml文件中,如

代码语言:javascript
复制
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"

  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: db:3306
     WORDPRESS_DB_USER: root
     WORDPRESS_DB_PASSWORD: root
    
volumes:
  dbdata:
  wp-content:

而且,除非您正在对php-apache映像执行特定的操作,否则您可以在这一点上实际删除它。

另一种方法是,如果您不希望所有东西都位于同一个坞-组合文件中,您可以手动定义网络并让您的容器加入它们。这个问题上的答案显示了如何相当容易地做到这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64043043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档