Достичь Docker-контейнера из другого Docker-контейнера внутри localhost: port - PullRequest
0 голосов
/ 31 октября 2019

Текущий состав yaml:

version: '3.7'

networks:
  app-tier:
    driver: bridge

services:
  php:
    container_name: docker_php
    build: .docker/php73
    volumes:
      - .:/srv/
    networks:
      - app-tier

  rabbitmq:
    container_name: docker_rabbitmq
    image: "rabbitmq:3-management"
    hostname: "rabbitmq-localhost"
    environment:
        RABBITMQ_DEFAULT_USER: guest
        RABBITMQ_DEFAULT_PASS: guest
    ports:
      - "15672:15672"
      - "5672:5672"
    networks:
      - app-tier

Моя цель - получить доступ к контейнеру docker_rabbitmq из docker_php в локальном хосте:

#bash php_container
telnet loaclhost 15672

Как настроить сеть, которая:

Контейнер A имеет порт на локальном хосте для контейнера B?

1 Ответ

0 голосов
/ 31 октября 2019

вы ограничены внутренним портом, что означает, что если ваши два контейнера находятся в одной и той же определенной докером сети, вы можете использовать внутренние порты соответствующего контейнера. Чтобы определить hostname для контейнера в другом контейнере, вы можете использовать атрибут links в определении сервиса внутри вашего docker-compose.yml.

Рассмотрите микросервис, которым вы хотите быть толькодоступ к ним имеют только контейнеры в этой сети, поэтому показ портов на хосте не имеет смысла. Предполагая, что rabbitmq - это сервис, к которому вы хотите получить доступ из сервиса php, вам нужно определить ссылку на rabbitmq в определении php сервиса (пожалуйста, не указывайте, что ссылка / определение хоста не является двунаправленной, если вам нужно php в вашем rabbitmq, вам нужно определить ссылку в rabbitmq для php)

version: '3.7'

networks:
  app-tier:
    driver: bridge

services:
  php:
    container_name: docker_php
    build: .docker/php73
    volumes:
      - .:/srv/
    networks:
      - app-tier
    links:
      - rabbitmq

  rabbitmq:
    container_name: docker_rabbitmq
    image: "rabbitmq:3-management"
    hostname: "rabbitmq-localhost"
    environment:
        RABBITMQ_DEFAULT_USER: guest
        RABBITMQ_DEFAULT_PASS: guest
    networks:
      - app-tier

Теперь вы можете получить доступ к внутренним портам rabbitmq из php но обратите внимание, что внешние порты недоступны, они предназначены для хоста.

# inside your `php` container `bash`
telnet rabbitmq <internal_port>

Кроме того, я не избавился от портов в rabbitmq, удалив

теперь эти портыrabbitmq недоступны с хоста.

Обновите

, если вы хотите получить доступ к портам, чтобы порты, открытые в rabbitmq, были доступны в php на localhost. самый простой и простой способ - настроить rabbitmq для работы в режиме контейнерной сети в сети php, чтобы сделать это простым добавлением network_mode: "container: [имя / идентификатор контейнера]"

rabbitmq:
    container_name: docker_rabbitmq
    image: "rabbitmq:3-management"
    hostname: "rabbitmq-localhost"
    environment:
        RABBITMQ_DEFAULT_USER: guest
        RABBITMQ_DEFAULT_PASS: guest
    network_mode: "container:php"
    ports:
        - "15672:15672"
        - "5672:5672"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...