Я пытаюсь настроить прокси-сервер nginx внутри docker, который будет прослушивать веб-трафик, а затем на основе виртуальных хостов перенаправлять трафик на разные экземпляры jenkins, также работающие внутри контейнеров docker. Чтобы организовать это, я использую docker-compose.
Мне удалось:
- Запустите экземпляры jenkins и поговорите с ними напрямую
- Запустите nginx и настройте его в качестве прокси-сервера для веб-сервера, работающего на другом хосте
Но когда я пытаюсь разрешить серверу nginx маршрутизировать трафик внутри docker, я не могу заставить его работать, просто получая ошибки шлюза с 502 пакетами и последующее отображение в журналах nginx:
[error] 6#6: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 172.17.0.1, server: , request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8081/", host: "localhost:8080"
Соответствующие части моего docker-compose.yml:
httpd: build: httpd ports: - "8080:8080" links: - "server_jenkins" - "clients_jenkins" restart: alwaysserver_jenkins: image: jenkins ports: - "8081:8080" restart: alwaysclients_jenkins: image: jenkins ports: - "8082:8080" restart: always
Файл httpd/Dockerfile выглядит следующим образом:
FROM nginxRUN rm -rf /etc/nginxCOPY config /etc/nginx/
И соответствующие части nginx.conf выглядят следующим образом (проксирование только одного экземпляра jenkins):
http { server { listen 8080; server_name server.build.example.com; root /tmp; location / { proxy_pass http://127.0.0.1:8081; } } server { listen 8080; server_name clients.build.example.com; root /tmp; location / { proxy_pass http://127.0.0.1:8082; } }}
Я пробовал следующие варианты первого URL-адреса proxy_pass (и некоторые другие, которые я не помню):
- http://server_jenkins:8081
- http://172.18.0.3:8081 (ip-номер, присвоенный server_jenkins при запуске с --x-networking)
При запуске с --x-networking я изменил инструкции link на container_name в docker-compose.yml
Варианты исполнения:
- докер: 1.9.1, сборка a34a1d5
- docker-compose: 1.5.2, сборка 7240ff3
- ОС: Debian 8 (работает внутри Virtualbox)