Я пытаюсь создать сайт Wordpress внутри стека Docker, состоящего из следующих служб:
wordpress
- сам сайт Wordpressdb
- контейнер 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 развертывание -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. Вам нужно указать докеру, чтобы он связал db
контейнер из wordpress
контейнер для ссылки на него по имени.
Что docker-compose делает под капотом, так это то, что ip docker дает db
контейнер и добавьте /etc/hosts
вход в wordpress
контейнер, чтобы вы могли ссылаться на него по имени.
Так что попробуйте добавить это в раздел 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
mysqld
требуется больше времени для начала по сравнению с httpd
(wordpress), поэтому вы видите ошибки