Итак, вчера я попал в интересную ситуацию.Я сделал быстрый файл docker-compose.yaml для nginx в качестве обратного прокси-сервера для jenkins.
Вот как это выглядит (2.1 все еще стандарт, даже если links
устарела в новых версиях).
# 2.1 as most recent version that allow me to use limit for resources.
version: '2.1'
services:
# Nginx
nginxlb:
image: nginx
container_name: nginx
ports:
- "80:80"
- "443:443"
volumes:
- ./data-www/:/var/www/html/
- ./nginx.conf:/etc/nginx/nginx.conf:ro
links:
- jenkins # <- I am linking jenkins container here.
# Jenkins CICD
jenkins:
image: jenkins/jenkins:2.152
container_name: jenkins
mem_limit: 412m
environment:
JAVA_OPTS: "-Djava.awt.headless=true"
volumes:
- ./data-jenkins/:/var/jenkins_home
restart: always
И nginx.conf
user www-data;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
autoindex off;
client_max_body_size 1200M;
server_tokens off;
server {
listen 80;
server_name _;
location / {
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# From
proxy_pass http://jenkins:8080;
proxy_read_timeout 90;
# Sendfile provides no advantages when operating as a proxy
sendfile off;
# Required for new HTTP-based CLI
proxy_http_version 1.1;
proxy_request_buffering off;
proxy_buffering off;
}
}
}
Как видите, все довольно просто.Правильно?
- Локальный компьютер работает (механизм докера 18.09.0 @ mac) -> Proxy Works (как и ожидалось).
- Удаленный запуск компьютера (механизм докера 18.06.1 @ centos7) ->Прокси-сервер не работает (что ????).
Я запускаю docker-compose up
, чтобы увидеть логи при запуске и посмотреть jenkins could not be resolved (3: Host not found)
, быстрый Google указывает на этот стекопоток тема .Я добавляю ресовлер, перезапускаю сервис, и он ... не работает, та же ошибка.
Хм, возможно я допустил какую-то ошибку, настроив docker-compose.yml
или nginx.conf
?Я обновляю конфигурацию на удаленной машине.Остановка как локальная, так и удаленная.Затем внесите (небольшие) корректировки в удаленный конфиг - запустите его.
- Локальный компьютер работает -> Прокси в порядке.
- Удаленный компьютер работает -> Сбой прокси.
Хххххм.
Добавление resovler
для обоих nginx.conf.
- Локальный компьютер работает -> Proxy Works.
- Удаленный компьютер работает -> Proxy Fails.
Примерно через час сдвига кода здесь и здесь(в основном из раздела местоположений nginx.conf
), пытаясь понять внутреннюю сеть докера, я сталкиваюсь с ситуацией, когда мой локальный контейнер jenkins перестает разрешаться.Я удалил resolver
на данный момент.Теперь обе машины выдают одинаковую ошибку: jenkins could not be resolved (3: Host not found)
.
- Локальная машина работает -> Сбой прокси.
- Удаленная машина работает -> Сбой прокси.
Я устал - просто выключите машину.На следующее утро я перезагружаю файлы конфигурации и докера.Начиная.
- Локальный компьютер работает -> Прокси в порядке.
- Удаленный компьютер работает -> Прокси в порядке.
Magic?Я не люблю магию.Мне нравится знать, что происходит:
Почему локальный домен не разрешается в одном случае и не разрешается в другом?Что произойдет, если в nginx.conf нет директивы resolve
?Как docker предоставляет собственный DNS для nginx в сети Docker?
Почему буквально такая же конфигурация начинает работать через несколько часов без изменений?(Я предполагаю, что внутренняя сеть докеров не является нестабильной, как обычная сеть).Что может быть причиной для этого?
Я делал это буквально сотни раз.Это всегда работало.За исключением вчерашнего дня.Я собираюсь прочитать НАМНОГО больше о сети докеров, однако, если у вас есть какие-либо догадки о том, что произошло - я здесь, чтобы выслушать вас.
TL / DR.nginx начинает работать непредсказуемо (в сети Docker) на удаленной и локальной машине.все прошло за 10 часов.моё предположение, что вчера на работе были какие-то колебания.Попытка найти причины такого поведения, чтобы больше не повторять эту ситуацию.Попытка понять больше о сети докера.