Проблема с конфигурацией nginx при использовании Docker - PullRequest
1 голос
/ 27 марта 2019

Я начинаю небольшой тест с использованием докера, чтобы настроить свой собственный сервер, и у меня есть небольшие проблемы.

Я использую образ nginx-fpm, в котором есть большинство служб, необходимых для настройки моего сервера.

Это мой Dockerfile Я сделал для того, чтобы настроить базовый сервер. Я построил его совершенно без проблем и назвал его nginx-custom-server.

Dockerfile

FROM "richarvey/nginx-php-fpm"

ADD /conf/simple-project.conf /etc/nginx/sites-available/simple-project.conf

RUN mkdir /srv/www/
RUN mkdir /LOGS/
RUN ln -s /etc/nginx/sites-available/simple-project.conf /etc/nginx/sites-enabled/simple-project.conf
RUN rm /etc/nginx/sites-enabled/default.conf

CMD ["/start.sh"]

Я запустил его с помощью следующей команды через терминал.

docker run --name=server-stack -v /home/ismael/Documentos/docker-nginx/code:/srv/www -v /home/ismael/Documentos/docker-nginx/logs:/LOGS -p 80:80 -d nginx-custom-server:stack

В папке /srv/www у меня есть простой привет мир php. Я хочу внести изменения в мой код на локальном компьютере и синхронизировать его с контейнером Docker, используя общую папку code.

Журналы nginx пусты, поэтому я не знаю, что не так. Я настроил логи в своем conf, но nginx не создал их, поэтому я думаю, что есть проблема с общим conf nginx, я думаю.

Вот конф, который я использую для моего привет-мира. Также я отобразил это имя сервера в хостах хост-машины.

простой project.conf

server {
    listen 0.0.0.0:80;
    server_name simple-project.olive.com;
    root /srv/www/simple-project/;

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

    location ~ ^/index\.php(/|$) {
        # the ubuntu default
        fastcgi_pass   /var/run/php-fpm.sock:9000;

        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;

        fastcgi_param APPLICATION_ENV int;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param HTTPS off;
    }

    location ~ \.php$ {
        return 404;
    }

    error_log /LOGS/custom_error.log;
    access_log /LOGS/custom_access.log;
}

EDIT: ошибка при попытке доступа к серверу внутри контейнера докера.

bash-4.4 # wget localhost: 80> /tmp/output.html --2019-03-27 12: 33: 11-- http://localhost/ Разрешение localhost ... 127.0.0.1, :: 1 Соединение с localhost | 127.0.0.1 |: 80 ... не удалось: соединение отклонено. Подключение к localhost | :: 1 |: 80 ... не удалось: Адрес недоступен. Повторная.

1 Ответ

2 голосов
/ 27 марта 2019

Из того, что я могу сказать, есть две причины, по которым вы не можете получить доступ к серверу.

Во-первых, вы не перенаправляете никакие порты из контейнера на хост.Вы должны включить аргумент -p 80:80 в свою команду docker run.

Во-вторых, вы пытаетесь прослушивать, как я полагаю, IP-адрес самого контейнера, который не является статическим (дефолт).В конфиге nginx вы должны заменить listen 172.17.0.2:80; на listen 0.0.0.0:80;.

После этих двух модификаций вы сможете получить доступ к вашему серверу.

Другой подход (но нерекомендуется) будет запускать контейнер с параметром --network=host.Таким образом, сеть хоста фактически видна изнутри контейнера.В этом сценарии вам нужно будет только настроить конфигурацию nginx на прослушивание действительного адреса.

Однако, если проблема не исчезнет, ​​хорошим подходом было бы запустить docker exec -it {$container_id} bash, когда контейнер работает, и посмотретьесли вы можете получить доступ к серверу из самого контейнера.Это будет означать, что сервер работает правильно, но по другим причинам порт неправильно перенаправляется на хост.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...