docker-compose - 公开链接服务端口

docker-compose - Expose linked service port

我正在尝试设置一个由 MySQL 数据库容器支持的 SonarQube 容器。 我的 docker-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 部分,我试图公开来自 SonarQube(Web 界面)的端口 9000 和端口 3306(MySQL 连接)。

是否有任何方法可以从 "main" 容器中的链接服务(例如本例中的 db)公开端口,例如sonar?

编辑:为了更好地解释我的需求,我想将两个端口都公开给我的 localhost。我需要从我的机器访问两个端口,因为我的 SonarQube 运行ner 需要访问数据库,我也想 运行 数据库中的一些查询, 从我的机器,而不是在另一个容器内.

您不需要:来自一项服务的 EXPOSE 端口对于另一项服务(链接到第一项)是直接可见的。

不需要端口映射(就像您从 SonarQube 为 9000 和 3306 所做的那样)
从主机访问容器需要端口映射。
但是从容器到a (linked) container (both managed by the same docker daemon), any port declared in EXPOSE in its Dockerfile是可以直接访问的。

I want to expose both ports to my localhost. I need access to both ports from my machine, as I SonarQube runner needs access to the database

那么,... db 部分应该有自己的端口映射部分:

db:
  ports:
    - "xxx:yyyy"