В текущем проекте я использую Docker. Я должен уточнить, что я довольно неопытен в этом.
Мой проект - проект PHP / Symfony. До этого я использовал nginx:alpine
и phpdocker/php-fpm
, чтобы мой проект работал в моей среде разработки. Тем не менее, я обнаружил, что они непригодны для моего случая, так как моя продукция фактически использует Apache.
Я обнаружил, что другой проект, который я использую, без проблем использует образы Docker webdevops
. Я хочу заменить два перечисленных выше контейнера на один - образ докера webdevops/php-apache-dev:alpine
.
Хотя конфигурация между двумя проектами кажется почти одинаковой, моя среда разработки не работает должным образом: я заканчиваюс этим:
Этот сайт не может быть достигнут - 172.18.0.7 отказался подключиться.
(Я также использую Traefik, но маршрутизируемый URI не работаетчто-то лучше. Сообщение об ошибке немного отличается: Bad Gateway
).
Я не могу отладить это. Я даже не знаю, где искать.
Ниже приведена конфигурация docker-compose.yml
, которую я хочу использовать:
version: '3.2'
services:
app:
image: webdevops/php-apache-dev:alpine
container_name: my-app
working_dir: /app
env_file: .env
environment:
WEB_DOCUMENT_ROOT: /public
WEB_DOCUMENT_INDEX: index.php
LOG_STDOUT: ./var/log/app.stdout.log
LOG_STDERR: ./var/log/app.stderr.log
# @todo list of unwanted PHP modules, cf. https://dockerfile.readthedocs.io/en/latest/content/DockerImages/dockerfiles/php-apache-dev.html#php-modules
# PHP_DISMOD:
php.error_reporting: E_ALL
PHP_DISPLAY_ERRORS: 1
PHP_POST_MAX_SIZE: 80M
PHP_UPLOAD_MAX_FILESIZE: 200M
PHP_MEMORY_LIMIT: 521M
PHP_MAX_EXECUTION_TIME: 300
PHP_DATE_TIMEZONE: Europe/Paris
volumes:
- .:/app
# - ./docker/apache2/conf.d:/opt/docker/etc/httpd/conf.d
- ~/.ssh:/home/application/.ssh:ro
- ~/.composer:/home/application/.composer
depends_on:
- elasticsearch
- database
Другие контейнеры работают так же, как и раньше. Это единственный сбой.
При вызове docker-compose up
ошибка не выдается. Все журналы, которые я мог найти в контейнере, хранят молчание. Насколько я могу судить, Traefik, похоже, не является проблемой. Вот результат docker ps
:
[/var/www/html/citizen-game]$ docker ps *[master]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6e9639e7a84d webdevops/php-apache-dev:alpine "/entrypoint supervi…" 4 hours ago Up 4 hours 80/tcp, 443/tcp, 9000/tcp my-app-app
be1b90fdf768 docker.elastic.co/elasticsearch/elasticsearch:6.2.4 "/usr/local/bin/dock…" 4 hours ago Up 4 hours (healthy) 9200/tcp, 9300/tcp my-app-elasticsearch
76fb8743a12f phpmyadmin/phpmyadmin "/run.sh supervisord…" 4 hours ago Up 4 hours 80/tcp, 9000/tcp my-app-phpmyadmin
dd41b4afe267 mysql:5.7 "docker-entrypoint.s…" 4 hours ago Up 4 hours (healthy) 3306/tcp, 33060/tcp my-app-database
91893783bcb1 rabbitmq:3.7-management "docker-entrypoint.s…" 4 hours ago Up 4 hours 4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp my-app-rabbitmq
63f551884bbf traefik:maroilles "/traefik --web --do…" 4 hours ago Up 4 hours 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:8080->8080/tcp
У меня вопрос, наверное, как это отладить? Я что-то упускаю из виду?
Редактировать
Вот (часть) содержимое файла docker-compose.override.yml
:
version: '3.2'
services:
app:
volumes:
- ~/.ssh:/home/application/.ssh
- ~/.composer:/home/application/.composer
labels:
- "traefik.backend=my-app"
- "traefik.frontend.rule=Host:my-app.docker"
- "traefik.docker.network=proxy"
networks:
- internal
- proxy
environment:
PHP_DEBUGGER: xdebug
#XDEBUG_REMOTE_HOST: <your host IP address>
XDEBUG_REMOTE_PORT: 9000
XDEBUG_REMOTE_AUTOSTART: 1
XDEBUG_REMOTE_CONNECT_BACK: 1
XDEBUG_PROFILER_ENABLE: 1
XDEBUG_PROFILER_ENABLE_TRIGGER: 1000
traefik:
image: traefik
container_name: citizen-game-traefik
command: --web --docker --docker.domain=docker --logLevel=DEBUG
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
restart: always
networks:
- internal
- proxy
rabbitmq:
networks:
- internal
- proxy
networks:
proxy:
external:
name: traefik
internal:
РЕДАКТИРОВАТЬ 2:
@ Мостафа
Я запустил следующее:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my-app-app
Результат:
172.18.0.7172.19.0.5
Пробуем этипрямо из браузера не получается "Этот сайт не доступен". Полагаю, этого следовало ожидать.
Я запустил следующее изнутри контейнера:
bash-4.4# supervisorctl status apache:apached
apache:apached RUNNING pid 13575, uptime 0:00:00
Как и предполагалось, я использовал ss -plant | grep 80
. Это не работает изнутри контейнера. Вот результат при вызове за его пределы:
[/var/www/html/my-app]$ ss -plant | grep 80
LISTEN 0 80 127.0.0.1:3306 0.0.0.0:*
ESTAB 0 0 192.168.1.88:39360 198.252.206.25:443 users:(("chromium-browse",pid=4203,fd=80))
SYN-SENT 0 1 192.168.1.88:50680 192.241.181.178:443 users:(("chromium-browse",pid=4203,fd=41))
LISTEN 0 128 *:80 *:*
LISTEN 0 128 *:8080 *:*
Я не уверен, что это говорит о многом. Я пытался установить ss
изнутри контейнера с apk
, но:
bash-4.4# apk add ss
ERROR: unsatisfiable constraints:
ss (missing):
required by: world[ss]
РЕДАКТИРОВАТЬ 3:
Вот результат вызова netstat
:
bash-4.4# netstat -plant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 229/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.11:32843 0.0.0.0:* LISTEN -
tcp 0 0 :::22 :::* LISTEN 229/sshd
tcp 0 0 :::9000 :::* LISTEN 225/php-fpm.conf)
bash-4.4# netstat -plant | grep httpd
(nothing)
Я не уверен, насколько это помогает, поскольку мой другой проект, который работает, дает тот же результат n bash-4.4# netstat -plant | grep httpd
. Однако без grep он включает в себя гораздо больше строк.