質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

4494閲覧

dockerを使ってgoからmysqlに接続したい

cmd-ttracom

総合スコア1

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

1グッド

2クリップ

投稿2021/10/09 06:50

前提・実現したいこと

プログラミング初心者です。dockerを使ってgoとデーターベースのコンテナを立て、goのコンテナからPing()を使って接続しようとしたところ、以下のメッセージが発生しました。

また、sqlx.Open()はエラーを返していないようです。
データーベースのコンテナからはマウントしたデータベースの反映の確認まですることができ、SELECTなども正常に動きました。どうしたら正常につながりますか?
ネットの見様見真似でやっているので無駄なコードがあるかもしれません。

発生している問題・エラーメッセージ

Connected! 2021/10/09 06:23:08 Cannot Connect to Database: dial tcp: lookup local_mysql on 127.0.0.11:53: read udp 127.0.0.1:36758->127.0.0.11:53: i/o timeout exit status 1

該当のソースコード

go

1package main 2 3import ( 4 "fmt" 5 "log" 6 7 _ "github.com/go-sql-driver/mysql" 8 "github.com/jmoiron/sqlx" 9) 10 11type City struct { 12 ID int `json:"id,omitempty" db:"ID"` 13 Name string `json:"name,omitempty" db:"Name"` 14 CountryCode string `json:"countryCode,omitempty" db:"CountryCode"` 15 District string `json:"district,omitempty" db:"District"` 16 Population int `json:"population,omitempty" db:"Population"` 17} 18 19func main() { 20 db, err := sqlx.Open("mysql", "root:password@tcp(local_mysql:3306)/world?charset=utf8&parseTime=True&loc=Local") 21 if err != nil { 22 log.Fatalf("Cannot Connect to Database: %s", err) 23 } 24 25 fmt.Println("Connected!") 26 27 err = db.Ping() 28 if err != nil { 29 log.Fatalf("Cannot Connect to Database: %s", err) 30 } 31}

dockerCompose

1version: "3" 2services: 3 db: 4 build: ./mysql 5 volumes: 6 - ./mysql/db:/docker-entrypoint-initdb.d #world.sqlをマウント 7 image: local_mysql 8 environment: 9 - MYSQL_ROOT_PASSWORD=password 10 11 ports: 12 - "3306:3306" 13 14 15 phpmyadmin: 16 image: phpmyadmin/phpmyadmin 17 environment: 18 - PMA_ARBITRARY=1 19 - PMA_HOST=db 20 - PMA_USER=root 21 - PMA_PASSWORD=password 22 links: 23 - db 24 ports: 25 - 4040:80 26 volumes: 27 - ./phpmyadmin/sessions:/sessions 28 29 app: 30 build: . 31 tty: true 32 volumes: 33 - .:/go/src/work 34 depends_on: 35 - db 36 ports: 37 - "8080:8080" 38 39

Dockerfile

1FROM mysql 2 3EXPOSE 3306 4 5ADD ./my.cnf /etc/mysql/conf.d/my.cnf 6 7CMD ["mysqld"] 8 9RUN apt-get update 10

Dockerfile

1FROM golang:latest 2 3RUN mkdir /go/src/work 4 5WORKDIR /go/src/work 6 7ADD . /go/src/work 8
milton_rb4life👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Goに詳しくはないのですが、おそらくlocal_mysqlのところはdbを指定するべきだと思います。
docker-composeでは、基本的にサービス名で名前解決ができます。今回、mysqlが動いているコンテナのサービス名はdbなので、ホスト名をdbにすれば接続できるのではないでしょうか?

投稿2021/10/09 11:26

ukyoda

総合スコア386

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cmd-ttracom

2021/10/09 12:57

解決しました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問