在docker-compose中拒绝了Mysql连接。

huangapple go评论118阅读模式
英文:

Mysql connection refused in docker-compose

问题

我在docker-compose中的golang应用程序中连接MySQL时遇到了问题。我可以从控制台连接到数据库:mysql -u user -D data -h 0.0.0.0 -P3306 -p
但是,使用docker-compose时无法连接。

我的docker-compose.yml文件如下:

  1. version: '3'
  2. services:
  3. app:
  4. build: ./
  5. volumes:
  6. - ./internal/app:/app
  7. - ./logs:/var/log/parser
  8. links:
  9. - db
  10. db:
  11. image: mysql:8
  12. container_name: mysqldb
  13. ports:
  14. - "3306:3306"
  15. volumes:
  16. - ./docker/mysql/conf:/etc/mysql/conf/conf.d
  17. - ./docker/mysql/logs/:/var/log/mysql
  18. - ./docker/mysql/init:/docker-entrypoint-initdb.d
  19. - ./docker/mysql/data:/var/lib/mysql
  20. environment:
  21. MYSQL_ROOT_PASSWORD: pass
  22. MYSQL_DATABASE: data
  23. MYSQL_USER: user
  24. MYSQL_PASSWORD: pass

在我的app main.go文件中:

  1. dbConfig := mysql.NewConfig()
  2. dbConfig.User = "user"
  3. dbConfig.Passwd = "pass"
  4. dbConfig.Addr = "mysqldb"
  5. dbConfig.DBName = "data"
  6. dbConfig.Net = "tcp"
  7. db, err := sql.Open("mysql", dbConfig.FormatDSN())
  8. if err != nil {
  9. panic(err.Error())
  10. }
  11. defer db.Close()

但是我得到了以下错误:

  1. panic: dial tcp 172.20.0.2:3306: connect: connection refused
英文:

I have a problem connecting to MySQL from my golang app in docker-compose. I can connect to db from console: mysql -u user -D data -h 0.0.0.0 -P3306 -p
But, I can't connect when using docker-compose.

My docker-compose.yml

  1. version: '3'
  2. services:
  3. app:
  4. build: ./
  5. volumes:
  6. - ./internal/app:/app
  7. - ./logs:/var/log/parser
  8. links:
  9. - db
  10. db:
  11. image: mysql:8
  12. container_name: mysqldb
  13. ports:
  14. - "3306:3306"
  15. volumes:
  16. - ./docker/mysql/conf:/etc/mysql/conf/conf.d
  17. - ./docker/mysql/logs/:/var/log/mysql
  18. - ./docker/mysql/init:/docker-entrypoint-initdb.d
  19. - ./docker/mysql/data:/var/lib/mysql
  20. environment:
  21. MYSQL_ROOT_PASSWORD: pass
  22. MYSQL_DATABASE: data
  23. MYSQL_USER: user
  24. MYSQL_PASSWORD: pass

In my app main.go

  1. dbConfig := mysql.NewConfig()
  2. dbConfig.User = "user"
  3. dbConfig.Passwd = "pass"
  4. dbConfig.Addr = "mysqldb"
  5. dbConfig.DBName = "data"
  6. dbConfig.Net = "tcp"
  7. db, err := sql.Open("mysql", dbConfig.FormatDSN())
  8. if err != nil {
  9. panic(err.Error())
  10. }
  11. defer db.Close()

But I get this error:

  1. panic: dial tcp 172.20.0.2:3306: connect: connection refused

答案1

得分: 2

我认为你的golang服务在MySQL服务之前启动。所以你必须先启动MySQL服务,然后再启动golang服务,可以使用depends_on来实现这一点。

新的docker-compose.yml文件中包含depends_on:

  1. version: '3'
  2. services:
  3. app:
  4. build: ./
  5. volumes:
  6. - ./internal/app:/app
  7. - ./logs:/var/log/parser
  8. depends_on:
  9. - mysqldb
  10. links:
  11. - db
  12. db:
  13. image: mysql:8
  14. container_name: mysqldb
  15. ports:
  16. - "3306:3306"
  17. volumes:
  18. - ./docker/mysql/conf:/etc/mysql/conf/conf.d
  19. - ./docker/mysql/logs/:/var/log/mysql
  20. - ./docker/mysql/init:/docker-entrypoint-initdb.d
  21. - ./docker/mysql/data:/var/lib/mysql
  22. environment:
  23. MYSQL_ROOT_PASSWORD: pass
  24. MYSQL_DATABASE: data
  25. MYSQL_USER: user
  26. MYSQL_PASSWORD: pass
英文:

I think your golang service starts before the MySQL service. so you have to start MySQL service first then golang service so, use depends_on to achieve that.

new docker-compose.yml with depends_on

  1. version: '3'
  2. services:
  3. app:
  4. build: ./
  5. volumes:
  6. - ./internal/app:/app
  7. - ./logs:/var/log/parser
  8. depends_on:
  9. - mysqldb
  10. links:
  11. - db
  12. db:
  13. image: mysql:8
  14. container_name: mysqldb
  15. ports:
  16. - "3306:3306"
  17. volumes:
  18. - ./docker/mysql/conf:/etc/mysql/conf/conf.d
  19. - ./docker/mysql/logs/:/var/log/mysql
  20. - ./docker/mysql/init:/docker-entrypoint-initdb.d
  21. - ./docker/mysql/data:/var/lib/mysql
  22. environment:
  23. MYSQL_ROOT_PASSWORD: pass
  24. MYSQL_DATABASE: data
  25. MYSQL_USER: user
  26. MYSQL_PASSWORD: pass

huangapple
  • 本文由 发表于 2021年10月8日 16:52:56
  • 转载请务必保留本文链接:https://go.coder-hub.com/69493131.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定