如何将 docker 与 compose、mysql 和 golang 连接起来

Lor*_*ine 5 mysql go docker docker-compose

我有一个我们称之为 mariadb 的数据库 docker,我还有一个使用 golang 的网络 docker。我想要做的是使用compose连接两个docker,但是在我的golang代码中,我必须提前知道数据库docker的ip地址。

Golang main.go:

db, err := sql.Open("mysql", 
"root:passsword@tcp(<should_be_database_docker_ip>:3306)/database")
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

再次澄清,我不能简单地将主机设为 localhost,因为我使用的数据库位于 docker 中,通常类似于 172.17.0.2 或 .3,但有时它会更改。谢谢!

And*_*rei 2

您可以只使用您的docker服务名称数据库,而不是容器ip

UPD 您还应该共享端口,例如

"3306:3306"
Run Code Online (Sandbox Code Playgroud)

或者端口将随机映射

参见输出

docker-compose ps
Run Code Online (Sandbox Code Playgroud)

UPD2 根据mysql docker image doc您还需要定义更多环境变量,例如MYSQL_DATABASE