当前位置: 首页 > 知识库问答 >
问题:

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

锺离伟彦
2023-03-14

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

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

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"

正如您所看到的,我已经使用WebDevOps映像安装了Apache作为服务,这将返回以下内容:

然后,我创建了一个具有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连接错误:(2002)php_network_getaddress:getaddrinfo失败:名称或服务未知

我做错了什么?

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

共有1个答案

李经国
2023-03-14

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

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

一个完整的例子:

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
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:truewith其名称
  • 您需要版本:“3.5”或更高版本才能使用Network.NameConfig
 类似资料:
  • 我正在尝试运行一个电子邮件收割机,当我在没有循环的情况下手动输入url时,我没有任何连接错误。 然而,当我从文件中加载url时,我得到以下错误“名称或服务错误” 回溯(最近一次调用):文件“/usr/lib/python3/dist-packages/urllib3/connection.py”,第141行,在新连接(self.host,self.port),self.timeout,**extr

  • 问题内容: 在服务器中运行代码,env为debian时出现此错误,并且 当我运行时,它可以正常工作,没有任何错误: 问题答案: 似乎您正在尝试将Redis与当前Debian环境无法识别的服务器连接。从Traceback,我看到您正在尝试使用主机名localhost进行连接, 但是,您的系统无法理解“ localhost”,在主机文件中输入内容,即说127.0.0.1是localhost。在/ et

  • 问题内容: 我正在尝试使用httplib将信用卡信息发送到authorize.net。当我尝试发布请求时,得到以下回溯: 我这样建立我的请求: 要添加另一层,它正在我们的开发服务器上运行,该服务器具有httplib 2.6,并且在httplib.HTTPSConnection中没有source_address参数。 任何帮助是极大的赞赏。 =============================

  • 我们有一个私人空间,并提供了一个内部API的访问权限,这样我们就可以从私人空间应用程序访问它。因此,我们开发了一个演示Java应用程序来测试它。当我们尝试用HTTP连接服务时,堆栈跟踪会像这样结束。 当我们ping私有空间中的相应IP时,我们可以看到它已启动。但是当我们试图从Java应用程序中访问服务时,它就像上面那样结束了。 Java 代码是这样的: 有没有人有任何想法来解决这个问题? 谢谢你。

  • 我配置了一个无密码的SFTP服务器。我想使用带有用户名和密码的jsch(JAVA)库连接它。我一直在使用以下代码行:- JAVA中的这一行是否会覆盖SSH配置的设置(少密码)? 请注意SFTP服务器使用终端命令SFTP连接良好,没有提示密码。

  • 我目前正试图获得一个gRPC工作的例子。我使用C # Asp.NET核心WebApi作为服务器,并尝试通过Python客户端连接到它。 我的原始文件: Python客户端: 当我尝试运行我的Python客户端时,我收到以下错误: Traceback(最近一次调用last):存根中文件“gRPCExampleClient.py”的第10行。插入(example_pb2。InsertRequest(V