【问题标题】:Wordpress on docker-compose no rundocker-compose 上的 Wordpress 不运行
【发布时间】:2016-07-16 02:24:43
【问题描述】:

这是我的 docker-compose.yml

version: '2'
services:
  wordpress:
    image: wordpress
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_PASSWORD: example
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example

服务正常运行,但几秒钟后,wordpress 容器停止。

这是我的 docker logs wordpress 容器:

WordPress not found in /var/www/html - copying now...
Complete! WordPress has been successfully copied to /var/www/html

MySQL Connection Error: (2002) php_network_getaddresses: getaddrinfo failed: Name or service not known

Warning: mysqli::mysqli(): php_network_getaddresses: getaddrinfo failed: Name or service not known in - on line 10

Warning: mysqli::mysqli(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name or service not known in - on line 10

MySQL Connection Error: (2002) php_network_getaddresses: getaddrinfo failed: Name or service not known

Warning: mysqli::mysqli(): php_network_getaddresses: getaddrinfo failed: Name or service not known in - on line 10

Warning: mysqli::mysqli(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name or service not known in - on line 10


MySQL Connection Error: (2002) php_network_getaddresses: getaddrinfo failed: Name or service not known
Warning: mysqli::mysqli(): php_network_getaddresses: getaddrinfo failed: Name or service not known in - on line 10

Warning: mysqli::mysqli(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name or service not known in - on line 10

Warning: mysqli::mysqli(): php_network_getaddresses: getaddrinfo failed: Name or service not known in - on line 10

MySQL Connection Error: (2002) php_network_getaddresses: getaddrinfo failed: Name or service not known

Warning: mysqli::mysqli(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name or service not known in - on line 10

为什么会这样?

【问题讨论】:

  • 你应该使用docker logs <dockerl_id_container>显示wordpress容器的日志
  • @ThanhNguyenVan 我编辑我的问题,即 docker logs wordpress 容器
  • wordpress源代码中mysql连接使用什么host参数?
  • 我在 docker-compose 部分引用了这个示例参考 hub.docker.com/_/wordpress

标签: wordpress docker docker-compose


【解决方案1】:

解决方案:

记得把mysql容器链接到wordpress容器:

links:
   - db:mysql

像这样:

version: '2'
services:
  wordpress:
    image: wordpress
    ports:
      - "8080:80"
    links:
      - db:mysql
    environment:
      WORDPRESS_DB_PASSWORD: example
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example

WordPress image official Dockerhub page 上没有提到这个重要的细节

【讨论】:

  • 链接中的mysql 主机别名在这里很重要:(
【解决方案2】:

这个anwser 为我工作,因为我没有足够的声望来投票给那个anwser,我在这里复制它:

depends_on:
  - db

这只是确保数据库容器在wordpress 容器之前完全加载。您需要告诉 docker 将 db 容器与 wordpress 容器链接起来以通过名称引用它。

docker-compose 在后台的作用是获取 ip docker 提供的 dbcontainer 并将 /etc/hosts 条目添加到 wordpress 容器,以便您可以通过名称引用它。

所以尝试将其添加到 wordpress 部分

links:
  - db

【讨论】:

    【解决方案3】:

    您是否在 Compose 文件 wordpress 服务中设置 DB 主机(和其他所需的 MySql 属性)(密码除外,在您的帖子中显示)?例如:

    environment:
      WORDPRESS_DB_PASSWORD: example
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: {xxx}
      WORDPRESS_DB_NAME: {xxx}
      WORDPRESS_TABLE_PREFIX: {xxx}
    

    特别是“主机”值,在您的设置中应该是db。你不应该做任何链接,虽然添加是个好主意

    depends_on:
      - db
    

    到您的 wordpress 服务块,它将设置依赖顺序以在您的 wordpress 容器之前启动 db 容器。 (links 属性也会做同样的事情,但要尽量保持简单。)

    注意:

    默认情况下,Compose 会为您的应用设置一个网络。每个 服务的容器加入默认网络,并且两者都是 该网络上的其他容器可以访问,并且可以被该网络上的其他容器发现 它们的主机名与容器名称相同。

    链接允许您定义服务的额外别名 可从其他服务访问。启用它们不需要 服务进行通信 - 默认情况下,任何服务都可以访问任何其他服务 以该服务的名称提供服务

    https://docs.docker.com/compose/networking/#/links

    除非您真正了解自己在做什么,否则我不会乱搞网络,因为在大多数情况下,默认设置都可以正常工作。如果您有一些特殊情况,您可以随时对其进行优化。

    【讨论】:

      【解决方案4】:

      在 'db:' 下添加这些为我解决了问题。

          command: --default-authentication-plugin=mysql_native_password
          restart: always
      

      【讨论】:

        【解决方案5】:

        我没有使用 yml,但有相同的日志,这不起作用

        docker run -dP --link elated_yonath -e WORDPRESS_DB_USER=libik -e WORDPRESS_DB_PASSWORD=prdik wordpress 
        

        但后来我发现,我必须将 :mysql 添加到链接容器中

        docker run -dP --link elated_yonath:mysql -e WORDPRESS_DB_USER=libik -e WORDPRESS_DB_PASSWORD=prdik wordpress 
        

        现在开始了。

        【讨论】:

          【解决方案6】:

          如前所述,您应该添加

          depends_on:
            - db
          

          但在此之后我仍然收到有关连接问题的消息。只有这个明确的问题 - 第二种选择:

          networks:
              local:
          

          这解决了错误 PHP 警告:mysqli::__construct(): php_network_getaddresses: getaddrinfo failed: 在第 22 行的标准输入代码中名称解析暂时失败

          【讨论】:

            猜你喜欢
            • 2022-01-24
            • 2017-12-18
            • 2019-02-15
            • 1970-01-01
            • 2017-03-25
            • 2018-02-08
            • 1970-01-01
            • 2021-12-01
            • 1970-01-01
            相关资源
            最近更新 更多