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

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

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

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

Go

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

Docker

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

Q&A

解決済

1回答

2275閲覧

DockerでGin(golang)のコンテナを構築するときに「package github.com/gin-gonic/gin is not a main package」というエラーが出る。

milton_rb4life

総合スコア24

docker-compose

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

Go

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

Docker

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

0グッド

0クリップ

投稿2022/06/05 14:27

ご覧いただきありがとうございます。
Docker、docker-composeによるコンテナ構築で、goginmysqlsqlxを組み合わせた簡素なREST-APIを作るのが目的で進めておりました。

docker compose up -dで、コンテナ構築・起動をさせている際に、ginのパッケージをインストールするタイミングでえらーになっておりdocker-compose.ymlDockerfileの記述内容を見直しておりますが見当がつかない状況です。

ぜひともご回答のほどよろしくお願いいたします。

(もし情報不足な点がございましたら、お申し付けいただければ幸いです。)

前提

●Docker: 20.10.16
●docker compose : 2.5.1
●コンテナでのGoのversion : @latestを指定
●Virtualbox(Windows版) : 6.1
●ゲストOS : Ubuntu Server 20.04 LTS

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

docker compose up -dで、コンテナ構築・起動をさせている際、MySQLのコンテナは正常に構築されていることはログに出力されています。

そして、go(gin)のコンテナ構築が始まったと同時に、

package github.com/gin-gonic/gin is not a main package

が出力されているタイミングでコンテナ構築が異常終了します。

docker

1 => ERROR [4/4] RUN go install github.com/gin-gonic/gin@latest && go install github.com/jmorion/sqlx && go install github.com/go-sql-driver/mysql 26.7s 2------ 3 > [4/4] RUN go install github.com/gin-gonic/gin@latest && go install github.com/jmorion/sqlx && go install github.com/go-sql-driver/mysql: 4#0 2.819 go: downloading github.com/gin-gonic/gin v1.8.0 5#0 3.072 go: downloading github.com/gin-contrib/sse v0.1.0 6#0 3.230 go: downloading github.com/mattn/go-isatty v0.0.14 7#0 3.358 go: downloading golang.org/x/net v0.0.0-20210226172049-e18ecbb05110 8#0 4.566 go: downloading github.com/go-playground/validator/v10 v10.10.0 9#0 4.830 go: downloading github.com/pelletier/go-toml/v2 v2.0.1 10#0 5.263 go: downloading github.com/ugorji/go/codec v1.2.7 11#0 5.613 go: downloading google.golang.org/protobuf v1.28.0 12#0 6.696 go: downloading gopkg.in/yaml.v2 v2.4.0 13#0 6.865 go: downloading golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069 14#0 7.837 go: downloading github.com/go-playground/universal-translator v0.18.0 15#0 8.032 go: downloading github.com/leodido/go-urn v1.2.1 16#0 8.561 go: downloading golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 17#0 9.430 go: downloading golang.org/x/text v0.3.6 18#0 13.48 go: downloading github.com/go-playground/locales v0.14.0 19#0 22.66 package github.com/gin-gonic/gin is not a main package

該当のソースコード

★go(gin)向けのDockerfile

Dockerfile

1FROM golang:latest 2 3COPY src/api /go/src/api 4 5WORKDIR /go/src/api/ 6 7RUN go install github.com/gin-gonic/gin@latest && go install github.com/jmorion/sqlx && go install github.com/go-sql-driver/mysql

★docker-compose.yml

YAML

1version: '3' 2services: 3 api: 4 depends_on: 5 - mysql 6 build: 7 context: . 8 dockerfile: ./docker/api/Dockerfile 9 ports: 10 - "8080:8080" 11 volumes: 12 - ./src/api:/go/src/api 13 mysql: 14 image: mysql:5.7 15#以下略

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

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

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

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

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

guest

回答1

0

ベストアンサー

「go install」を「go get」に変えてみてください。

要点整理

  • go installはツール(実行可能バイナリ)のインストール用のコマンド
  • go install のURLの後ろには「@バージョン名」が必須になりました(@latestが最新のバージョン)
  • ライブラリの導入には依然と同じくgo getを使います
  • go getにはGoモジュールの初期化フォルダの配下であることが必須になりました。
  • Goモジュールの初期化には「go mod init モジュール名(リポジトリURL推奨)」です
  • GO111MODULE=offの設定は新規の開発ではもう使わないほうが良いと思います(過去の資産を動かす場合のみ利用)

投稿2022/06/05 22:55

編集2022/06/06 12:26
nobonobo

総合スコア3367

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

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

milton_rb4life

2022/06/06 11:07

早速のご助言ありがとうございます。 「go get」に入れ替えたところ、別のエラーが発生しました。 ``` #0 2.788 go: go.mod file not found in current directory or any parent directory. #0 2.788 'go get' is no longer supported outside a module. #0 2.788 To build and install a command, use 'go install' with a version, #0 2.788 like 'go install example.com/cmd@latest' #0 2.788 For more information, see https://golang.org/doc/go-get-install-deprecation #0 2.788 or run 'go help get' or 'go help install'. ``` go1.18のリリースノートでは、「go get は使えないので go install を使ってください」と明記されていました。 https://tip.golang.org/doc/go1.18#go-command docker-compose.ymlでgo環境の環境変数「GO111MODULE=off」にして、同じく「go get」で実行しましたが、同じく「'go get' is no longer supported 」エラーが発生します。
nobonobo

2022/06/06 12:18

何をインストールしたいかによります。対象は「実行可能なバイナリ」でしょうか他のパッケージから利用する「ライブラリ」でしょうか? > go1.18のリリースノートでは、「go get は使えないので go install を使ってください」と明記されていました。 > https://tip.golang.org/doc/go1.18#go-command ここで説明されているのは「実行可能ファイルのインストールがしたいなら」です。ライブラリを導入したいのであればやはり「go get」を使います。 そのエラーメッセージに対する解決方法としては src/apiフォルダにて「go mod init api」をやってみてください。
nobonobo

2022/06/06 12:20

あと、「go install uuu.rrr.lll/fff@バージョン」というようにgo installをする場合は「@バージョン」が必須になっています。
milton_rb4life

2022/06/06 12:52 編集

アドバイスどおり「src/apiフォルダにてgo mod init api」を実行して、 「Dockerfile」を下記に書き直したところ正常にビルドできました。 本当にありがとうございました。 --------- RUN go get github.com/gin-gonic/gin@latest \ && go get github.com/jmoiron/sqlx@latest \ && go get github.com/go-sql-driver/mysql@latest
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問