我有一个docker-compose如下:
version: '3.2'
services:
web:
build: .
image: lap
volumes:
- ./webroot:/var/www/app
- ./configs/php.ini:/usr/local/etc/php/php.ini
- ./configs/vhost.conf:/etc/apache2/sites-available/000-default.conf
links:
- dbs:mysql
dbs:
image: mysql
ports:
- "3307:3306"
environment:
- MYSQL_ROOT_PASSWORD=root
volumes:
- ./configs/conf.d:/etc/mysql/conf.d
- /var/mysql:/var/lib/mysql
docker --version
Docker版本17.05.0-ce,build 89658be
docker-compose --version
docker-compose版本1.13.0,build 1719ceb
lsb_release -a
没有可用的LSB模块。 经销商ID:Debian 描述:Debian GNU / Linux 8.10(jessie) 发布:8.10 代号:jessie
如果我在php容器上运行以下命令并检查/ etc / host,我看不到链接(我在使用docker container时链接 - 链接)
docker-compose up -d
docker exec -it web_1 bash
root@web_1> cat /etc/hosts
127.0.0.1 localhost
:: 1 localhost ip6-localhost ip6-loopback
fe00 :: 0 ip6-localnet
ff00 :: 0 ip6-mcastprefix
ff02 :: 1 ip6-allnodes
ff02 :: 2 ip6-allrouters
172.18.0.3 9c401ea7d031
dbs
容器被分配了127.18.0.2
个ip地址,我期待的内容如上所述/etc/hosts
127.18.0.2 dbs mysql
我在我的某个Mac OSX系统中看到了相同的行为,可能是我做错了什么或丢失了什么?
答案 0 :(得分:0)
来自docker-compose的service-name
可以访问容器。 docker-compose的links
只是此服务名称的别名。它应该可以通过service-name
或alias-name
从同一网络访问。
在你的情况下:
尝试从web
ping dbs
或mysql
。
答案 1 :(得分:0)
旧版容器链接已弃用,将来会从docker中删除。手头的问题是您希望Web容器与数据库容器通信。
解决方案很简单。
localhost
或127.0.0.1
作为后备值。假设已经完成,你现在可以在你的作品上做到这一点......
您现在可以在dockerfile中定义DB_HOST=dbs
。
version: '3.2'
services:
web:
build: .
image: lap
volumes:
- ./webroot:/var/www/app
- ./configs/php.ini:/usr/local/etc/php/php.ini
- ./configs/vhost.conf:/etc/apache2/sites-available/000-default.conf
environment:
- DB_HOST=dbs
dbs:
image: mysql
ports:
- "3307:3306"
environment:
- MYSQL_ROOT_PASSWORD=root
volumes:
- ./configs/conf.d:/etc/mysql/conf.d
- /var/mysql:/var/lib/mysql
这将解决这个难题。