如何使用docker-compose连接Docker容器时彼此处理IP地址?

我正在使用docker-compose来构build一个完整的开发堆栈。

该应用程序需要一个MySQL服务器来工作。

mysql服务器是由docker-compose设置的外部容器:

mysql: image: mysql:5.6 volumes: - /data/mysql:/var/lib/mysql - ./docker/mysql.d:/etc/mysql/conf.d ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: password 

该应用程序拥有自己的docker-compose.yml并引用了mysql容器:

 my-application: build: . # the Dockerfile resides in the current folder ports: - "9180:80" - "9543:443" external_links: - mysql_mysql_1:mysql environment: DOCKER_ENVIRONMENT: dev DB_NAME: local_db DB_PASS: password DB_USER: root DB_HOST: # how to set the mysql's IP address? 

因为它是dynamic的,所以我不能在docker工人中传递它们。

我知道该应用程序是知道的IP地址,因为我有一些variables设置:

 application-container$ env|grep ADDR MYSQL_PORT_3306_TCP_ADDR=172.17.0.241 

然而,这不是我所需要的DB_HOST

我可以将variables以某种方式映射到DB_HOST或将其设置为不同的方式吗?

您不必设置IP,但可以引用容器的虚拟主机名 ,这与您命名链接容器的值相同。

这意味着你确实可以通过links (推荐)或external_links来设置docker docker-compose.yml

 your_application: build: . ports: - "9180:80" - "9543:443" external_links: - mysql_mysql_1:docker-mysql environment: DB_HOST: docker-mysql 

当你连接到你的docker集装箱,你可以连接到你的MySQL容器:

 application-container $ mysql -h docker-mysql -uroot -ppassword -p 3360 

当你从同一个docker-composer.yml链接容器的时候,它也是一样的。

这也是logging :

链接到另一个服务中的容器。 既可以指定服务名称也可以指定链接别名(SERVICE:ALIAS),或者只指定服务名称(也将用于别名)。

 links: - db - db:database - redis 

具有别名名称的条目将在此服务的容器内的/ etc / hosts中创build,例如:

 172.17.2.186 db 172.17.2.186 database 172.17.2.187 redis 

环境variables也将被创build – 请参阅环境variables参考了解详细信息。