Задать вопрос
@michaelromanov90

Почему не удаётся запустить docker связку nginx+php-fpm?

Добрый день.

Только изучаю вопрос - пока нет целей примонтировать каталог. Пытаюсь избавиться от ошибки 502 (при localhost:8080).

1. Есть структура проекта

601b7f5186432178473687.jpeg

1.1. Имею конфиг-файл для nginx (localhost:8080)
server {
    listen 80;
    charset utf-8;
    index index.php index.html;
    root /app/public;


    location / {
        try_files $uri /index.php?$args;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php-fpm:9000;
        fastcgi_index index.php;
        fastcgi_read_timeout 300;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}


1.2. файл php
<?php
print "Hi!";
?>


2. И докер файлы
2.1 Docker file для nginx ( \site\docker\nginx\Dockerfile)
FROM nginx:1.17-alpine


#COPY ./docker/nginx/conf.d /etc/nginx/conf.d
COPY ./././docker/nginx/conf.d ./etc/nginx/conf.d




#COPY ./public ./public
COPY ./public ./app/public

WORKDIR /app


2.2. докер фал для php-fpm (\site\docker\php-fpm\Dockerfile)

3. Провожу сборку (всё ок, ошибок нет)
docker build --file=site/docker/nginx/Dockerfile --tag=site-nginx site
docker build --file=site/docker/php-fpm/Dockerfile --tag=site-php-fpm site
docker network create site
docker run -d --network site --name php-fpm site-php-fpm
docker run -d --network site --name nginx -p 8080:80 site-nginx


4. проверяю пути в контейнерах
nginx:
/etc/nginx/conf.d/default.conf - скопирован
/app/public/index.php - скопирован
php-fpm:
/app/public/index.php - скопирован

5. Результат
502 Bad Gateway
nginx/1.17.10

6. Логи
при этом логи
nginx:
/var/log/nginx/access.log - пуст
/var/log/nginx/error.log - пуст

php-fpm:
отдельного лога нет
логи апатча - пусты
  • Вопрос задан
  • 578 просмотров
Подписаться 1 Простой 4 комментария
Пригласить эксперта
Ответы на вопрос 1
@q2digger
никого не трогаю, починяю примус
Если делаете руками два разных контейнера и они должны быть линкованны, но не хотите почему то пользоваться docker-compose, не забывайте делать линк между ними. пример.
1. взлетел первый
docker run -d --network site --name one -P nginxdemos/hello

2. взлетел второй , линкован к первому
docker run -d --network site --name two --link one -P nginxdemos/hello

2. статус
CONTAINER ID   IMAGE              COMMAND                  CREATED          STATUS          PORTS                   NAMES
40132d06643d   nginxdemos/hello   "nginx -g 'daemon of…"   3 seconds ago    Up 1 second     0.0.0.0:32772->80/tcp   two
5b6100f38e7d   nginxdemos/hello   "nginx -g 'daemon of…"   56 seconds ago   Up 54 seconds   0.0.0.0:32771->80/tcp   one

4. заходим в контейнер two, проверяем линк
docker exec -it 5b6 /bin/sh
/ # ping one
PING one (172.18.0.2): 56 data bytes
64 bytes from 172.18.0.2: seq=0 ttl=64 time=0.081 ms
64 bytes from 172.18.0.2: seq=1 ttl=64 time=0.128 ms


Домашнее задание: зайти в контейнер nginx проверить доступность контейнера php-fpm (в конфиге nginx у вас именно это имя)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
27 дек. 2024, в 17:43
500 руб./за проект
27 дек. 2024, в 17:36
2000 руб./за проект
27 дек. 2024, в 17:34
1500 руб./за проект