首页 > 解决方案 > 如何将容器中的动态暴露端口传递给我的应用程序?

问题描述

我在我的 akka 项目中有这样的数据库配置:

mydb = {
  driver = "com.mysql.jdbc.Driver"
  profile = "slick.jdbc.MySQLProfile$"
  jdbcUrl = "jdbc:mysql://127.0.0.1:3306/play_db?useSSL=false"
  username = "root"
  password = ""
}

我正在尝试使用 docker-compose 在容器中构建 mysql。但是,我需要端口是动态的,而不是总是 3306 在运行“docker-compose up”之后,如何将这个暴露的端口传递给我的 AKKA 应用程序?

存在任何标准方式吗?

标签: scaladockerakkatravis-ci

解决方案


接下来是一个解决方案:

  1. 如果您不在乎获取 mysql 的端口,请通过 next 并转到第 2 步。

    否则,在 中定义 db 容器的名称docker-compose.yml,例如 db_container;然后之后docker-compose up,您可以使用:

    docker inspect --format='{{(index (index .NetworkSettings.Ports "80/tcp") 0).HostPort}}' db_container

    获取映射到容器的 3306 端口的动态更改的主机端口。

  2. 假设您动态获取的端口是32768,然后在您启动 akka 项目的 shell 中,执行以下操作:

    export MYSQL_PORT=32768
    

    修改application.conf您的 akka 项目,如下所示:

    jdbcUrl = "jdbc:mysql://127.0.0.1:"${MYSQL_PORT}"/play_db?useSSL=false"
    

    然后,当 akka 项目启动时,它会从环境变量中获取端口MYSQL_PORT


推荐阅读