如何使用docker-compose链接两个容器

目前,我有两个容器,我从图像中build立,然后链接两个:

例如:

#mysql docker build -t my/mysql docker-mysql docker run -p 3306:3306 --name mysql -d my/mysql:latest #webapp docker build -t my/tomcat:7.0 tomcat/7.0 docker run -d --link mysql --name tomcat7 my/tomcat:7.0 

由于我使用mysql容器链接webapp容器,所以webapp容器获得了一个创build的MYSQL_PORT_3306_TCP_ADDR环境variables。 我使用这个环境variables,然后连接到我的jdbcstring中的MySQL数据库。

所有这些工作正常,但现在我想使用docker-compose以便可以构build一切,并从一个命令运行。

然而,在玩docker组合时,我注意到它将docker_前缀docker_到图像名称,并且不赞成使用link选项。

上面的build / run命令将如何转换为docker-compose yml文件,以便webapp容器可以连接到jdbc的mysql容器。

这是一个粗略的翻译成docker撰写。

请注意,docker-compose标记了它自己的图像,所以假设你在一个名为test的目录中创build了一个mysql映像,那么这个容器名将变成test_mysql_1 。 因为可以使用docker-compose扩展多个容器,所以在末尾添加了1。

这个文件也假定这个文件结构

 ├── docker-mysql │  └── Dockerfile ├── tomcat │  └── 7.0 │   └── Dockerfile └── docker-compose.yml 

 version: '2' services: mysql: build: context: "./docker-mysql" hostname: mysql ports: - "3306:3306" webapp: build: context: "./tomcat/7.0" hostname: tomcat7 links: - mysql 

您需要在撰写yml中添加一个alias属性。 以下是来自文档的文档 ,是一个非常简短的例子

 web: links: - db - db:database - redis 

这个组成片段定义了一个web容器,它必须链接到db和redis容器,并且还会在db容器中添加别名数据库。

在你的情况下,我认为对于tomcat容器的yml看起来像这样

 mysql: image: my/mysql:latest ports: - "3306:3306" tomcat7: image: my/tomcat:7.0 links: - mysql 

请记住,tomcat容器不暴露任何端口!