我正在尝试在由以下服务组成的Docker堆栈中创build一个Wordpress站点:
wordpress – WordPress的网站本身 db – MySQL容器 我有以下stack.yml文件:
version: '3.1' networks: abtehnic: services: db: image: mysql:latest restart: always networks: - abtehnic environment: MYSQL_ROOT_PASSWORD: XXXXX MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: barbu123 wordpress: image: abtehnic-wordpress depends_on: - db restart: always ports: - 80 environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_PASSWORD: barbu123 networks: - abtehnic volumes: - ./source:/var/www/html
我使用以下命令部署堆栈:
$ docker stack deploy -c stack.yml abtehnic
docker ps命令输出以下内容:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 256e65fe2c4c mysql:latest "docker-entrypoint..." About a minute ago Up About a minute 3306/tcp abtehnic_db.1.mo0xp17adt2jocu9yivkzg19g 26481d8bab95 wordpress:4.8 "docker-entrypoint..." About a minute ago Up About a minute 80/tcp abtehnic_wordpress.1.tiikrjwm1kcmxjg7v74vrcquw
我试图找出映射的端口通过:
$ docker port <container_id for wordpress>
其输出是空的。 另外,当我运行docker logs <container_id_for_wordpress>我得到以下内容:
Warning: mysqli::mysqli(): php_network_getaddresses: getaddrinfo failed: Name or service not known in - on line 22 Warning: mysqli::mysqli(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name or service not known in - on line 22 MySQL Connection Error: (2002) php_network_getaddresses: getaddrinfo failed: Name or service not known Warning: mysqli::mysqli(): (HY000/2002): Connection refused in - on line 22 MySQL Connection Error: (2002) Connection refused Warning: mysqli::mysqli(): (HY000/2002): Connection refused in - on line 22 MySQL Connection Error: (2002) Connection refused MySQL Connection Error: (2002) Connection refused Warning: mysqli::mysqli(): (HY000/2002): Connection refused in - on line 22 AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 10.0.1.3. Set the 'ServerName' directive globally to suppress this message AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 10.0.1.3. Set the 'ServerName' directive globally to suppress this message [Sat Oct 28 16:05:32.189285 2017] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.10 (Debian) PHP/5.6.31 configured -- resuming normal operations [Sat Oct 28 16:05:32.189321 2017] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'
这是我的问题:
wordpress容器不能访问db容器? depends_on: - db
这只是确保数据库容器在wordpress容器之前完全加载。 你需要告诉docker从wordpress容器链接db容器来引用它的名字。
docker-compose在底层做了什么,就是使用ip docker给db容器,并在wordpress容器中添加一个/etc/hosts条目,以便你可以通过名字来引用它。
所以尝试添加到wordpress部分
links: - db
我假设你正在做像docker port 26481d8bab95这样的事情,按照你定义的80端口的问题,所以你的答案是80端口:
# docker run -d -p 80:80 wordpress dc9e4aab1015eb5d82cf489e2943d76084faceaf3093bc3238964d6cfa81ab1c # docker port dc9e4aab1015eb5d82cf489e2943d76084faceaf3093bc3238964d6cfa81ab1c 80/tcp -> 0.0.0.0:80 #
堆栈与否,你仍然应该能够使用docker port
httpd (wordpress)相比, mysqld启动需要更长的时间,这就是为什么你看到错误