我有一个数据库docker,我们称之为mariadb,我还有一个使用golang的web docker。我尝试做的是使用compose连接两个docker,但在我的golang代码中,我必须提前知道数据库docker的ip地址。
Golang main.go:
db, err := sql.Open("mysql",
"root:passsword@tcp(<should_be_database_docker_ip>:3306)/database")Docker-compose.yml
version: '3'
services:
web:
image: web_docker
ports:
- "8080"
depends_on:
- database
database:
image: mariadb
ports:
- "3306"
environment:
- MYSQL_ROOT_PASSWORD=password
volumes:
- /data:/var/lib/mysql再次澄清,我不能简单地将主机设置为本地主机,因为我使用的数据库位于docker中,通常类似于172.17.0.2或.3,但有时会发生变化。谢谢!
发布于 2017-08-17 22:08:42
您可以只使用您的码头服务名称数据库,而不是容器ip
UPD你也应该像这样共享端口
"3306:3306"或端口将随机映射
请参阅以下输出
docker-compose ps根据mysql docker image doc,你还需要定义更多的环境变量,例如MYSQL_DATABASE
发布于 2017-08-18 06:55:23
您还可以考虑将它们放在一个网络中。这样,您就能够从您的web容器访问数据库3306上的数据库。这种方法的优点是数据库不会暴露给外部世界(您的本地计算机),并且只有mynet网络上的容器能够看到它。
version: '3'
services:
web:
image: web_docker
ports:
- 8080:8080
depends_on:
- database
networks:
- mynet
database:
image: mariadb
environment:
- MYSQL_ROOT_PASSWORD=password
volumes:
- /data:/var/lib/mysql
networks:
- mynet
networks:
mynet:
driver: "bridge"(代码未测试)
https://stackoverflow.com/questions/45736762
复制相似问题