如何使用compose,mysql和golang连接docker

我有一个数据库泊坞窗,我们将调用mariadb,我也有一个使用golang的web泊坞窗。 我想要做的是用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 

再次澄清,我不能简单地让主机是本地主机,因为我使用的数据库是在docker,通常是像172.17.0.2或.3但有时它会改变。 谢谢!

你也可以考虑把它们放在一个networking中。 这样,您就可以从Web容器访问数据库3306上的数据库。 这种方法的好处是数据库不会暴露在外部(您的本地机器),只有mynetnetworking上的容器才能看到它。

 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" 

(代码未经testing)

您可以使用您的泊坞窗服务名称数据库 ,而不是容器IP

UPD你也应该共享端口

 "3306:3306" 

或端口将随机映射

见输出

 docker-compose ps 

UPD2根据mysql docker image doc你还需要定义更多的环境variables,例如MYSQL_DATABASE