如何将容器中的动态公开端口传递给我的应用程序?

时间:2019-05-08 22:13:19

标签: scala docker akka travis-ci

我在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应用程序?

存在任何标准方式吗?

1 个答案:

答案 0 :(得分:1)

下一个解决方案是

  1. 如果您不在意获取mysql的端口,请通过下一步并转到步骤2。

    否则,请在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
    

    接下来修改您的akka​​项目的application.conf

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

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