簡體   English   中英

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

[英]How to connect dockers with compose, mysql, and golang

我有一個數據庫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但有時會更改。 謝謝!

您可以使用docker服務名稱數據庫 ,而不是容器ip

UPD您還應該共享像

"3306:3306"

或端口將隨機映射

看到的輸出

docker-compose ps

UPD2根據mysql docker image doc你還需要定義更多的環境變量,例如MYSQL_DATABASE

您也可以考慮將它們放在一個網絡中。 這樣,您就可以從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"

(代碼未經測試)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM