Подключитесь к docker mysql с golang - PullRequest
0 голосов
/ 16 февраля 2020

Работает docker mysql

docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

[mysql docker работает контейнер] [1]

Go Код:

основной пакет

import (
"database/sql"

_ "github.com/go-sql-driver/mysql"
)

func main() {

db, err := sql.Open("mysql", "root:root@tcp(172.17.0.2:3306)/test-db")
if err != nil {
    panic(err)
}
defer db.Close()
err = db.ping()
if err != nil {
   log.Print(err)
}

пинг вызывает ETIMEDOUT. Правильно указан IP-адрес контейнера.

Ответы [ 2 ]

0 голосов
/ 17 февраля 2020

Вам необходимо открыть порт MySQL, используя порт docker -p, например,

docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -p 33060:3306 -d mysql:5.7

Тогда стандартный порт приложения MySQL 3306 будет сопоставлен на IP вашего хоста с IP-адресом хоста. порт 33060. Затем используйте этот IP-адрес и порт в конфигурации приложения golang.

Также, как указал @Adrian, дождитесь полной загрузки контейнера MySql. Вы можете посмотреть его журнал через docker logs -f <CONTAINER_UD>. Как только вы увидите, что он прослушивает локальный порт 3306, ваше приложение должно подключиться.

0 голосов
/ 16 февраля 2020

Он должен предоставлять порт для docker внутреннего IP, однако IP-адрес можно менять при каждом перезапуске. Чтобы сопоставить порт с локальным хостом, вы можете использовать флаг -p 127.0.0.1:3306:3306

. Чтобы указать IP для контейнера docker, вы можете создать свою собственную пользовательскую виртуальную сеть и привязать IP к этой сети при запуске ваших контейнеров.

docker network create --subnet=192.168.101.0/24 test
docker run -d --name db1 --network test --ip=192.168.101.10 -e MYSQL_ROOT_PASSWORD=12345 mysql:5.7
mysql -h 192.168.101.10 -uroot -p12345

Также убедитесь, что MySQL запущен. Вы можете проверить статус с помощью docker ps и войти с помощью docker logs db1. Где db1 имя, указанное с флагом --name.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...