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

时间:2017-08-17 13:40:53

标签: mysql docker go docker-compose

我有一个数据库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但有时它会发生变化。谢谢!

2 个答案:

答案 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"

(代码未经测试)