首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将dockers与compose、mysql和golang连接

问如何将dockers与compose、mysql和golang连接
EN

Stack Overflow用户
提问于 2017-08-17 21:40:53
回答 2查看 4.1K关注 0票数 5

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

Golang main.go:

代码语言:javascript
复制
db, err := sql.Open("mysql", 
"root:passsword@tcp(<should_be_database_docker_ip>:3306)/database")

Docker-compose.yml

代码语言:javascript
复制
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,但有时会发生变化。谢谢!

EN

回答 2

Stack Overflow用户

发布于 2017-08-17 22:08:42

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

UPD你也应该像这样共享端口

代码语言:javascript
复制
"3306:3306"

或端口将随机映射

请参阅以下输出

代码语言:javascript
复制
docker-compose ps

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

票数 2
EN

Stack Overflow用户

发布于 2017-08-18 06:55:23

您还可以考虑将它们放在一个网络中。这样,您就能够从您的web容器访问数据库3306上的数据库。这种方法的优点是数据库不会暴露给外部世界(您的本地计算机),并且只有mynet网络上的容器能够看到它。

代码语言:javascript
复制
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"

(代码未测试)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45736762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档