【问题标题】:docker-compose - Expose linked service portdocker-compose - 公开链接服务端口
【发布时间】:2015-12-17 12:15:58
【问题描述】:

我正在尝试设置一个由 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 界面)和端口 3306(MySQL 连接)公开端口 9000。

有没有办法从“主”容器中公开链接服务(例如db)的端口,例如sonar?

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

【问题讨论】:

  • 我现在明白了。但是,为什么不像对 Sonar 所做的那样简单地将 db EXPOSE'd 端口映射到主机呢? Sonar 仍将直接使用 EXPOSE db 端口,但您从 localhost 的查询将使用您在 db/ports 部分中指定的端口值(请参阅下面我编辑的答案)

标签: docker dockerfile docker-compose


【解决方案1】:

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

不需要端口映射(就像您对 SonarQube 的 9000 和 3306 所做的那样)
从主机访问容器需要端口映射。
但是从容器到a (linked) container(都由同一个docker守护进程管理),EXPOSE in its Dockerfile中声明的任何端口都可以直接访问。

我想将两个端口都暴露给我的本地主机。我需要从我的机器访问这两个端口,因为我的 SonarQube runner 需要访问数据库

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

db:
  ports:
    - "xxx:yyyy"

【讨论】:

  • 出于某种原因,我尝试过,但没有成功。我猜我的其余配置是完全错误的,但现在就像一个魅力。 Tks
  • 当 docker 在 vi​​rtualenv 中运行时这是真的吗?我似乎无法让它工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多