我有一个数据库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")
多克尔-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
再次澄清一下,我不能简单地让主机成为localhost,因为我正在使用的数据库位于docker中,通常类似于172.17.0.2或.3但有时它会发生变化。谢谢!
答案 0 :(得分:1)
您可以使用泊坞窗服务名称数据库,而不是容器ip
UPD 您还应该共享像
这样的端口docker-compose ps
或端口将随机映射
见
的输出function saveSign(){
alert('asd')
var iput =[];
var checkedBoxes = document.querySelectorAll('input[type=checkbox]');
for (var s=1;s<=checkedBoxes.length;s++){
iput+=checkedBoxes[s].id
}
console.log(iput)
}
UPD2 根据{{3}},您还需要定义更多环境变量,例如 MYSQL_DATABASE
答案 1 :(得分:1)
您也可以考虑将它们放在网络中。这样,您就可以从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"
(代码未经测试)