如何使用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
- 使用Elastic Beanstalk在AWS上转到Web应用程序,不会在日志中显示输出
- Google容器registrygolang mobyauthentication
- 用UnixHTTPConnectionPool将Docker组合起来
- 去共享Docker容器共享库
- 使用Docker容器部署Golang Web应用程序静态文件
- Docker Golang API使用内存中的文件创build一个容器
- Docker Golang在docker run上构build自定义操作
- sqlx.Connect()卡在docker alpine:latest
- Docker与golang-onbuild构成无法在代理之后下载