docker-compose — открыть порт связанной службы

Я пытаюсь настроить контейнер SonarQube, поддерживаемый контейнером базы данных MySQL. Мой докер-compose.yml:

sonar:
  environment:
    - SONARQUBE_USER=sonar
    - SONARQUBE_PASSWORD=sonar
    - SONARQUBE_DATABASE=sonar
    - SONARQUBE_JDBC_URL=jdbc:mysql://db:3306/sonar?useUnicode=true&characterEncoding=utf8
  build: .
  ports:
    - "19000:9000"
    - "19306:3306"
  links:
    - db
db:
  environment:
    - MYSQL_ROOT_PASSWORD=root-secret
    - MYSQL_USER=sonar
    - MYSQL_PASSWORD=sonar
    - MYSQL_DATABASE=sonar
  image: mysql

В разделе ports я пытаюсь открыть как порт 9000 из SonarQube (веб-интерфейс), так и порт 3306 (соединение MySQL).

Есть ли способ открыть порт из связанной службы (например, db в этом случае) из «основного» контейнера, например. sonar?

РЕДАКТИРОВАТЬ: Просто чтобы лучше объяснить мои потребности, я хочу открыть оба порта для моего localhost. Мне нужен доступ к обоим портам с моего компьютера, так как для запуска SonarQube требуется доступ к базе данных, и я также хочу выполнять некоторые запросы в базе данных, со своего компьютера, а не внутри другого контейнера.


person resilva87    schedule 17.12.2015    source источник
comment
Теперь я понимаю. Но почему бы просто не сопоставить порт db EXPOSE с хостом, как вы сделали для Sonar? Sonar по-прежнему будет использовать порт EXPOSE db напрямую, но ваш запрос от localhost будет использовать значение порта, которое вы указали в разделе db/ports (см. мой отредактированный ответ ниже)   -  person VonC    schedule 17.12.2015


Ответы (1)


Вам не нужно: порт EXPOSE из одной службы виден напрямую. от другого (ссылка на первый).

Сопоставление портов не требуется (как для 9000 от SonarQube и 3306).
Сопоставление портов необходимо для доступа к контейнеру с хоста.
Но из контейнера в (связанный) контейнер (оба управляются одним и тем же демоном docker), любой порт, объявленный в EXPOSE в его Dockerfile доступен напрямую.

Я хочу открыть оба порта для моего локального хоста. Мне нужен доступ к обоим портам с моей машины, так как мне нужен доступ к базе данных SonarQube runner.

Что ж, тогда... раздел db должен иметь свой собственный раздел сопоставления портов:

db:
  ports:
    - "xxx:yyyy"
person VonC    schedule 17.12.2015
comment
По какой-то причине я попробовал это, и у меня не получилось. Я предполагаю, что остальная часть моей конфигурации была совершенно неправильной, но теперь работает как шарм. спасибо - person resilva87; 17.12.2015
comment
Верно ли это, когда докер работает в виртуальном окружении? Я не могу заставить это работать - person Te-jé Rodgers; 01.04.2016