docker上的WordPress – 撰写不运行

这是我的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日志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 

为什么会这样呢?

解:

记住要将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官方Dockerhub页面上没有提及

您是否在您的Compose文件wordpress服务(除了密码,在您的文章中显示)设置数据库主机(和其他需要的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容器之前的数据库容器。 (一个links属性可以做同样的事情,但是要尽量简化。)

注意:

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

通过链接,您可以定义额外的别名,通过这些别名可以从另一个服务访问服务。 他们不需要启用服务进行通信 – 默认情况下,任何服务都可以以该服务的名称到达任何其他服务

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

除非你真正理解你在做什么,否则我不会在networking上乱搞,因为在大多数情况下,默认值将工作正常。 如果你有一些特殊情况,你可以随时优化。

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

 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 

现在开始了。