Попытка создать многоконтейнерное приложение golang mysql. Аналогично примеру с докером https://docs.docker.com/get-started/07_multi_container/
Я не понимаю, почему в соединении отказывают.
dial tcp 127.0.0.1:3306: connect: connection refused
Вот мой docker-compose.yaml
version: '3.7'
services:
api:
# api service starts ok but fatal error at db connection
maria-db:
image: mariadb:10-focal
container_name: s-maria-db
command: '--default-authentication-plugin=mysql_native_password'
restart: always
healthcheck:
test: ["CMD-SHEL", "mysqladmin ping -h 127.0.0.1 --password=secret --silent"]
interval: 3s
retries: 5
start_period: 30s
expose:
- "3306:3306"
# setting some env vars to create the DB
environment:
MYSQL_ROOT_PASSWORD: "secret"
MYSQL_DATABASE: "s_db"
# we mount a data volume to make sure we don't lose data
volumes:
- db-data:/var/lib/mysql
volumes:
db-data:
Вот мой код для подключения к БД
func Connect() (*sql.DB, error) {
db, err := sql.Open("mysql", "root:secret@/s_db")
if err != nil {
return nil, err
}
defer db.Close()
pingErr := db.Ping()
if pingErr != nil {
return nil, pingErr
}
return db, nil
}
Я всегда вижу dial tcp 127.0.0.1:3306: connect: connection refused
Я могу
docker exec -it s-maria-db bash
.
.
.
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| s_db |
| mysql |
| performance_schema |
| sys |
+--------------------+
и вижу, что БД настроена правильно, но я никогда не могу к ней подключиться.






попробуйте подключиться, используя имя контейнера, поэтому композитор докеров использует сеть докеров. Это позволяет вам подключаться через имя контейнера в качестве сетевого псевдонима.
func Connect() (*sql.DB, error) {
db, err := sql.Open("mysql", "root:secret@tcp(s-maria-db)/s_db")
if err != nil {
return nil, err
}
defer db.Close()
pingErr := db.Ping()
if pingErr != nil {
return nil, pingErr
}
return db, nil
}
Дополнительно обновлено
for i := 0; i < 60; i++ {
if err := db.Ping(); err == nil {
fmt.Print("We are connected!")
break
}
time.Sleep(time.Second)
}
как видно https://github.com/docker/awesome-compose/blob/master/nginx-golang-mysql/backend/main.go
Я все еще вижу отказ в подключении, когда на
db.Ping()@charindu