Intereting Posts
Как контейнер объема докеров (установленный каталог хоста), используемый в файле компоновки версии 2 ImportError: невозможно импортировать имя <пакет> в контейнеры при перезапуске исправлений модулей конвертировать Dockerfile в скрипт Bash Вытяните частные изображения докеров из реестра Google Container без gcloud Кубернетес на Мезосе непрерывная интеграция drone с github eval "$ (docker-machine env default)" приводит к ошибке проверки соединения TLS Как я могу получить результат от докера о выполнении какого-то скрипта? docker-machine – Ошибка при попытке вызова на сервер плагина: соединение отключено успешное сообщение журнала протоколов-докеров использование if loop в файле докеров Успешное отображение сообщения после завершения докеры Travis не кеширующий каталог Как получить клиентов внешнего ip, im, используя Gcloud / kubernetes Любое предложение о запуске Aerospike на Кубернете на CoreOS на GCE?

Настройка прокси Nginx в Docker с использованием Ansible

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

Вот мой nginx.conf :

 events { worker_connections 1024; } http { server { listen 8080; location / { proxy_pass http://192.168.1.14:9000; } } } 

Вот соответствующая часть моего файла Ansible YAML:

 - name: Install Nginx docker: name: nginx image: nginx detach: True ports: - 8080:8080 volumes: - /etc/docker/nginx/nginx.conf:/etc/nginx/nginx.conf:ro 

Когда я запускаю свой плей-лист, nginx работает, но не привязан к 8080 как показано здесь:

 6a4f610e86d nginx "nginx -g 'daemon off" 35 minutes ago Up Less than a second 80/tcp, 443/tcp nginx 

Однако, если я запускаю контейнер nginx напрямую:

 docker run -d -v /etc/docker/nginx/nginx.conf:/etc/nginx/nginx.conf:ro -p 8080:8080 nginx 

nginx и мой прокси работает как ожидалось и слушает 8080 :

 c3a46421045c nginx "nginx -g 'daemon off" 2 seconds ago Up 1 seconds 80/tcp, 443/tcp, 0.0.0.0:8080->8080/tcp determined_swanson 

Любая идея, почему это работает в одном направлении, но не в другом?

Обновить

В соответствии с руководством, указанным в выбранном ответе, я обновил свой файл YAML:

 - name: Install Nginx docker: name: nginx image: nginx detach: True ports: - 8080:8080 expose: - 8080 volumes: - /etc/docker/nginx/nginx.conf:/etc/nginx/nginx.conf:ro 

Во-первых, вам нужно убедиться, что ваше изображение nginx EXPOSE порт 8080, и вы можете указать прямо в своем файле ansible yaml:

 expose (added in 1.5) 

Список дополнительных портов контейнера для отображения портов или ссылок портов. Если порт уже открыт с использованием EXPOSE в файле Docker, вам не нужно его снова открывать.

Тогда единственное другое отличие, которое я вижу при рассмотрении модуля Ansible docker, состоит в том, что порт находится внутри двойных кавычек:

 ports: - "8080:9000" 

Кроме того, если вы хотите использовать prexypass для другого контейнера в одном и том же докере, вы можете использовать ссылку вместо фиксированного IP-адреса.

 links: - "myredis:aliasedredis" по теме links: - "myredis:aliasedredis" 

Таким образом, ваш nginx.conf включает фиксированное правило:

 proxy_pass http://aliasedredis:9000;