如何使用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参考了解详细信息。