我必须设置一个测试环境,其中有一个Web应用程序容器和一个MySql容器。 Web应用程序连接到MySql DB以获取要显示的一些数据。我写了一个docker compose文件,当我执行它时,在同一个桥接网络中创建了2个容器,但是,我仍然无法从Web应用程序容器访问数据库。我在AWS EC2 Amazon Linux机器上运行它。虽然我可以使用相同的用户凭据从服务器连接到数据库。
version: '2'
services:
consul:
image: "gliderlabs/consul-server"
command: "-server -bootstrap"
hostname: consul
container_name: consul
ports:
- "8400:8400"
- "8500:8500"
- "172.17.0.1:53:8600/udp"
networks:
- my_net
registrator:
image: "gliderlabs/registrator"
command: "-internal consul://172.17.0.1:8500"
container_name: registrator
hostname: registrator
volumes:
- /var/run/docker.sock:/tmp/docker.sock
depends_on:
- consul
networks:
- my_net
db:
image: "mysql:5.5"
container_name: mysql
hostname: mysql
volumes:
- ./mydb:/docker-entrypoint-initdb.d
environment:
MYSQL_ROOT_PASSWORD: xxxx
depends_on:
- registrator
ports:
- 3306:3306
networks:
- my_net
web:
build: .
depends_on:
- db
- consul
ports:
- 8080:8080
volumes:
- .:/code
networks:
- my_net
networks:
my_net:
driver: bridge
连接代码:
cnx = mysql.connector.connect(host='{0}'.format(db_host),user="root",passwd="xxxx",db="mysql")
if cnx.is_connected():
print(' Success! Connected to MySQL database')
db_host = will be taken from consul dns query
我从consul dns查询中获取了mysql容器的正确桥接IP。