如何链接docker compose文件中的容器(docker-compose.yml)?

时间:2017-05-24 08:05:32

标签: docker docker-compose

我无法使用docker compose链接MySQL和播放容器。请参阅下面的yml文件:

zookeeper:
    image: zookeeper:3.4
    ports:
       - 2181:2181
kafka:
    image: ches/kafka:latest
    ports:
       - 9092:9092
    links: 
       - zookeeper
myDpm:
    image: dpm-image:latest
    ports:
       - 9000:9000
    links:
       - kafka
       - zookeeper
mySql:
    image: mysql:latest
    environment:
       MYSQL_ROOT_PASSWORD: root
myMc3:
    image: mc3-v3:3.0
    ports:
        - 9001:9000
    links:
        - mySql:3306  
    environment:
       runMode: dev
myElastic:
    image: elasticsearch:2.4.0
    ports:
        - 9200:9200

我想将mysql与我的Play scala项目相关联。我收到一个错误:

  

[error] - [play.core.server.netty.PlayDefaultUpstreamHandler] - 无法调用动作   java.sql.SQLTimeoutException:等待10001ms后的超时   连接。在   com.zaxxer.hikari.pool.BaseHikariPool.getConnection(BaseHikariPool.java:227)   〜[com.zaxxer.HikariCP-java6-2.3.7.jar:na] at   com.zaxxer.hikari.pool.BaseHikariPool.getConnection(BaseHikariPool.java:182)   〜[com.zaxxer.HikariCP-java6-2.3.7.jar:na] at   com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:93)   〜[com.zaxxer.HikariCP-java6-2.3.7.jar:na] at   slick.jdbc.hikaricp.HikariCPJdbcDataSource.createConnection(HikariCPJdbcDataSource.scala:12)   〜[com.typesafe.slick.slick-hikaricp_2.11-3.1.1.jar:na] at   slick.jdbc.JdbcBackend $ BaseSession.conn $ lzycompute(JdbcBackend.scala:415)   〜[com.typesafe.slick.slick_2.11-3.1.1.jar:na] at   slick.jdbc.JdbcBackend $ BaseSession.conn(JdbcBackend.scala:414)   〜[com.typesafe.slick.slick_2.11-3.1.1.jar:na] at   slick.jdbc.JdbcBackend $ SessionDef $ class.prepareStatement(JdbcBackend.scala:297)   〜[com.typesafe.slick.slick_2.11-3.1.1.jar:na] at   slick.jdbc.JdbcBackend $ BaseSession.prepareStatement(JdbcBackend.scala:407)   〜[com.typesafe.slick.slick_2.11-3.1.1.jar:na] at   slick.jdbc.StatementInvoker.results(StatementInvoker.scala:33)   〜[com.typesafe.slick.slick_2.11-3.1.1.jar:na] at   slick.jdbc.StatementInvoker.iteratorTo(StatementInvoker.scala:22)   〜[com.typesafe.slick.slick_2.11-3.1.1.jar:na] at   slick.jdbc.Invoker $ class.foreach(Invoker.scala:48)   〜[com.typesafe.slick.slick_2.11-3.1.1.jar:na] at   slick.jdbc.StatementInvoker.foreach(StatementInvoker.scala:16)   〜[com.typesafe.slick.slick_2.11-3.1.1.jar:na] at   slick.jdbc.Invoker $ class.firstOption(Invoker.scala:24)   〜[com.typesafe.slick.slick_2.11-3.1.1.jar:na] at   slick.jdbc.StatementInvoker.firstOption(StatementInvoker.scala:16)   〜[com.typesafe.slick.slick_2.11-3.1.1.jar:na] at   slick.jdbc.StreamingInvokerAction $ HeadOptionAction.run(StreamingInvokerAction.scala:57)   〜[com.typesafe.slick.slick_2.11-3.1.1.jar:na] at   slick.jdbc.StreamingInvokerAction $ HeadOptionAction.run(StreamingInvokerAction.scala:56)   〜[com.typesafe.slick.slick_2.11-3.1.1.jar:na] at   slick.backend.DatabaseComponent $ DatabaseDef $$不久$ 2.liftedTree1 $ 1(DatabaseComponent.scala:237)   〜[com.typesafe.slick.slick_2.11-3.1.1.jar:na] at   slick.backend.DatabaseComponent $ DatabaseDef $$不久$ 2.run(DatabaseComponent.scala:237)   〜[com.typesafe.slick.slick_2.11-3.1.1.jar:na] at   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)   〜[na:1.8.0_111] at   java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:617)   〜[na:1.8.0_111]在java.lang.Thread.run(Thread.java:745)   〜[na:1.8.0_111]引起:   com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:   通信链路故障

2 个答案:

答案 0 :(得分:0)

如上所述here码头链接在某种程度上被网络所取代。

  

在Docker网络功能之前,您可以使用Docker链接功能来允许容器相互发现。随着Docker网络的引入,容器可以通过其名称自动发现。

默认情况下,撰写文件中的所有容器都会加入默认网络(如果未定义其他网络),并且您应该能够使用servicename和正确的端口访问另一个服务中的一个服务,例如:mySql:3306 < / p>

更多信息可在network docs from docker

中找到

答案 1 :(得分:0)

正确链接到MySQL:

myMc3:
  ...
  links:
    - mySql

(没有3306)