Docker上的Wordpress - 没有运行

alv*_*zsh 9 wordpress docker docker-compose

这是我的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
Run Code Online (Sandbox Code Playgroud)

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

这是我的docker日志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
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

Vin*_*oft 7

解:

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

links:
   - db:mysql
Run Code Online (Sandbox Code Playgroud)

像这样:

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

WordPress图像官方Dockerhub页面上未提及此重要细节

  • 链接中的“ mysql”主机别名在这里很重要:( (2认同)

NOZ*_*IGH 5

这个anwser对我有用,因为我没有足够的声望来投票这个 anwser,我把它复制到这里:

depends_on:
  - db
Run Code Online (Sandbox Code Playgroud)

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

什么docker-compose引擎盖下确实是走IP泊坞窗给人的db容器,并添加/etc/hosts到进入wordpress容器,所以你可以通过名字引用它。

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

links:
  - db
Run Code Online (Sandbox Code Playgroud)


ldg*_*ldg 3

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

\n
environment:\n  WORDPRESS_DB_PASSWORD: example\n  WORDPRESS_DB_HOST: db\n  WORDPRESS_DB_USER: {xxx}\n  WORDPRESS_DB_NAME: {xxx}\n  WORDPRESS_TABLE_PREFIX: {xxx}\n
Run Code Online (Sandbox Code Playgroud)\n

特别是“主机”值,在您的设置中应该是db。您不必执行任何链接,但最好添加

\n
depends_on:\n  - db\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

笔记:

\n
\n

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

\n

链接允许您定义额外的别名,通过这些别名可以从另一个服务\n访问另一个服务。它们不需要启用\n服务进行通信 -默认情况下,任何服务都可以通过该服务\xe2\x80\x99s 名称访问任何其他\n服务

\n
\n

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

\n
\n
\n

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

\n