doubu4406 2019-08-29 16:54
浏览 438

Docker Compose。无法从一个容器连接到在另一个容器中运行的MySQL实例

Strange problem. I cannot connect from one container to MySQL instance running in a different container. Setup is working on MacOS but not on windows.

I have docker-compose and two services: App and DB:

I am waiting for DB to be initialized. Then I try to ping db in my Golang app.

This is the connection string: root:pass@tcp(db:3060)/orders?loc=Local&parseTime=1. User correct. Password correct. Hostname also correct. Port correct. But I got the error:

dial tcp 192.168.48.2:3060: connect: connection refused

Credentials are Ok because I can connect at the same time to DB from my host.

I am using Go MySQL Driver and MySQL 5.7. I tried also MySQL 8 - the same effect.

Below my docker-compose.yml

version: "3.7"
services:
  db:
    image: mysql:5.7
    container_name: golang-example-api-db
    # restart: on-failure
    tty: true
    ports:
        - "33306:3306"
    environment:
      MYSQL_USER: root
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: orders
      SERVICE_TAGS: prod
      SERVICE_NAME: mysql
      TZ: Asia/Bangkok
    volumes:
      - orders-db:/var/lib/mysql
    networks:
        - app-network
  app:
    build:
      context: .  
      dockerfile: Dockerfile
    image: kodersky/golang-api-example
    container_name: golang-api-example-api
    restart: on-failure
    tty: true
    environment:
      SERVICE_NAME: golang
      SERVICE_TAGS: prod
      TERM: xterm-256color
      TZ: Asia/Bangkok
      WAIT_HOSTS: db:3306
    depends_on:
      - db
    command: sh -c '/wait && /go/src/github.com/kodersky/golang-api-example/main'
    networks:
        - app-network

Golang code:

connection := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s", dbUser, dbPass, dbHost, dbPort, dbName)
val := url.Values{}
val.Add("parseTime", "1")
val.Add("loc", "Local")
dsn := fmt.Sprintf("%s?%s", connection, val.Encode())
dbConn, err := sql.Open(`mysql`, dsn)

if err != nil && viper.GetBool("debug") {
    log.Println(err)
}
err = dbConn.Ping()
if err != nil {
    log.Fatal(err)
}
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 delta降尺度计算的一些细节,有偿
    • ¥15 Arduino红外遥控代码有问题
    • ¥15 数值计算离散正交多项式
    • ¥30 数值计算均差系数编程
    • ¥15 redis-full-check比较 两个集群的数据出错
    • ¥15 Matlab编程问题
    • ¥15 训练的多模态特征融合模型准确度很低怎么办
    • ¥15 kylin启动报错log4j类冲突
    • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
    • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序