[英]How to handle IP addresses when linking docker containers with each other using docker-compose?
我正在使用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
或以不同方式设置它吗?
您不必设置IP,但可以引用容器的虚拟主机名 ,这与您为链接容器命名的值相同。
这意味着您确实可以在docker docker-compose.yml
设置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中创建具有别名'name的条目,例如:
172.17.2.186 db 172.17.2.186 database 172.17.2.187 redis
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.