Контейнер Docker работает в нескольких портах вместо указанного порта - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь запустить образ докера, используя ansible, используя следующий модуль

 - name: run the image in a docker container                                        
    docker_container:                                                                     
      name: deploy1                                                                    
      image: redhat-jboss                                                                                                                               
      state: started                                                                
      exposed_ports:                                                                  
        - 8089/tcp"                                                                     

, но контейнер открыт в нескольких портах.

$ docker ps -a

CONTAINER ID- 18f8hddd237                                                         IMAGE    18f8hddd237                
COMMAND  "/docker-entrypoint.…"               
CREATED     11 seconds ago                                                      
STATUS      Up 10 seconds                                                                                                                                                                                                                        NAMES      redhat-jboss                                                             
PORTS        22/tcp, 3528-3529/tcp, 4447/tcp, 4712-4713/tcp, 5432/tcp, 5445/tcp, 5455/tcp, 7500/tcp, 7600/tcp, 8009/tcp, 8080/tcp, 8089-8090/tcp, 8443/tcp, 8787/tcp, 9990/tcp, 9999/tcp, 23364/tcp, 45700/tcp, 57600/tcp   deploy1      

Дайте мне знать, как решить эту проблему.

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Доступны ли открытые порты для хост-системы по умолчанию? Нет.
Доступны ли открытые порты для связанных контейнеров? Да.
Доступны ли открытые порты для других контейнеров? Нет.

Что такое незащищенный порт?
Защищенный порт - это, в основном, ваш образ докера, говорящий: «Эти порты доступны для снаружи связь. Но вы должны сначала опубликовать их. "

Примечание: снаружи означает вне своей собственной сети.Если вы связываете контейнеры вместе, они могут связываться через открытые порты.

Где определены открытые порты?
Открытые порты, которые вы видите, определены в Dockerfileизображение вы работаете (или в одном из родителей).Они определены с помощью синтаксиса EXPOSE <portnumber>.

Вы также можете определить дополнительные открытые порты при запуске контейнера, что вы делаете в разделе expose_ports вашего docker-compose.yml file.

Как сделать открытые порты доступными
Чтобы получить доступ к незащищенному порту, вам нужно опубликовать его, тогда он будет доступен нахост.Чтобы опубликовать незащищенный порт, вы указываете эти порты в части ports вашего файла docker-compose.yml или в аргументе -p при запуске контейнера (например, -p 22 для предоставления его случайному порту, -p 22:2222выставить его на порт 2222 на хосте и т. д.).

Дополнительная информация о EXPOSE vs publish .

0 голосов
/ 04 октября 2018

Используйте ports вместо exposed_ports.В вашем случае это должно быть что-то вроде:

name: run the image in a docker container
docker_container:
  name: deploy1
  image: redhat-jboss
  state: started
  ports: 
    - '0.0.0.0:8089:8089'

Объяснение.В модуле ansible docker_container есть два разных параметра:

  • exposed_ports - это «Список дополнительных портов контейнера, который сообщает Docker, что контейнер прослушивает указанные сетевые порты во время выполнения.Если порт уже выставлен с помощью EXPOSE в Dockerfile, его не нужно снова открывать. "Так что это просто расширяет порты EXPOSE в Dockerfile тем, что вы добавили.
  • published_ports (псевдоним ports): «Список портов для публикации из контейнера на хост».Это порты, которые действительно будут подключены к портам хоста.

Более подробную информацию о том, как открыть порты, вы можете прочитать в официальной документации для модуля.

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