我正在使用docker-compose构建完整的开发堆栈。
该应用程序需要一个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?
我无法在docker-compose中传递它们,因为它是动态的。
我知道应用程序知道mysql IP地址,因为我设置了某些变量:
application-container$ env|grep ADDR MYSQL_PORT_3306_TCP_ADDR=172.17.0.241
但这不是我的要求DB_HOST。
DB_HOST
我可以以某种方式将变量映射DB_HOST或设置为其他变量吗?
您不必设置IP,但是您可以引用容器的虚拟 主机名 ,这与您为链接容器命名的值相同。
这意味着您确实docker-compose.yml可以使用links(推荐)或通过在中设置DB_HOST external_links:
docker-compose.yml
links
external_links
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链接容器时,其工作原理也相同。
这也记录在案:
链接到另一个服务中的容器。请指定服务名称和链接别名(SERVICE:ALIAS),或者仅指定服务名称(也将用于别名)。 links: - db - db:database - redis 别名名称的条目将在此服务的容器内的/ etc / hosts中创建,例如: 172.17.2.186 db 172.17.2.186 database 172.17.2.187 redis 也将创建环境变量 - 有关详细信息,请参见环境变量参考。
链接到另一个服务中的容器。请指定服务名称和链接别名(SERVICE:ALIAS),或者仅指定服务名称(也将用于别名)。
links: - db - db:database - redis
别名名称的条目将在此服务的容器内的/ etc / hosts中创建,例如:
172.17.2.186 db 172.17.2.186 database 172.17.2.187 redis
也将创建环境变量 - 有关详细信息,请参见环境变量参考。