Как сказано в заголовке, мой nginx контейнер не работает должным образом, пока я не перезапущу его. У меня есть несколько служб, определенных в файле docker-compose.yml
, который выглядит следующим образом: reverseproxy
- мой nginx контейнер, а service-a
и service-b
- Node.js серверы.
version: "3.4"
services:
reverseproxy:
container_name: reverseproxy
build:
context: ./proxy
ports:
- "80:80"
service-a:
container_name: service-a
build:
context: ./service-a
ports:
- "3500:3500"
command: ["yarn", "run", "watch-debug"]
service-b:
container_name: service-b
build:
context: ./service-b
ports:
- "3501:3501"
command: ["yarn", "run", "watch-debug"]
Dockerfile
, используемый для создания моей службы reverseproxy
, просто удаляет файл default.conf, а затем копирует файл nginx.conf
с моего хоста в образ:
FROM nginx:alpine
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/nginx.conf
И мой nginx.conf
файл, который получает скопированный в изображение выглядит так:
worker_processes 1;
events { worker_connections 1024; }
http {
sendfile on;
server {
listen 80;
location /api/customers {
proxy_pass http://service-a:3500;
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
location /api/products {
proxy_pass http://service-b:3501;
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
}
}
Когда я docker-compose up
все работает нормально, но когда я отправляю POST на одну из своих конечных точек (например, localhost: 80 / api / customers), тогда nginx отвечает 502. Но если я docker container stop reverseproxy
, а затем docker container start reverseproxy
, тогда все работает, как ожидалось, и я могу подключиться к своим конечным точкам с помощью localhost: 80.
Мне удалось docker exec -it reverseproxy /bin/sh
и смог убедиться, что default.conf
пропало, а nginx.conf
было скопировано с моего хоста, как и ожидалось. Я следил за образцом конфигурации со страницы nginx на Docker Hub, и большинство онлайн-руководств демонстрируют почти идентичную настройку.
Что может быть причиной этого? Как сделать так, чтобы моя служба nginx Revereproxy работала должным образом без перезапуска контейнера?
Изменить: я использую Postman для выполнения своих запросов localhost: 80