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上的其他容器都可以访问它们,并且可以通过与容器名称相同的主机名来发现它们。
通过链接,您可以定义额外的别名,通过这些别名可以从另一个服务访问服务。 他们不需要启用服务进行通信 – 默认情况下,任何服务都可以以该服务的名称到达任何其他服务 。
除非你真正理解你在做什么,否则我不会在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
现在开始了。