コンテナが作れない

問題文

あなたはICTSC専門学校の学生です。

新入生向けに学内向けCTFを開催するにあたって、アプリ開発チームとサーバ構築チームに分かれてCTFサーバの構築を行うことになりました。サーバ構築チームはあなたの後輩のA君が担当、あなたは両方を担当しています。
当初はサークルで余っていたラックサーバ上のVMで展開する予定でしたがA君が突然「VMじゃなくてDockerでやりたいです」と言い出しました。
A君は最近Dockerを触り始めたばかりなのですが、サーバの構成自体は簡単なので大丈夫だろうと判断し任せることになりました。

アプリ開発が終わり、A君に展開に必要なファイルを渡してDocker上で展開してもらったところコンパイルがうまくいかないと言われました。
これ以上時間をかけてしまうと後のスケジュールに影響してしまうため、A君に代わりあなたがトラブルシューティングを行うことにします。

原因を特定し、スコアボードが正常に表示されるようにDockerfileを修正してください。

条件

スコアボードのソースコード及び docker-compose.yaml を変更してはいけない
MySQL及びRedisの構成ファイルを変更してはいけない
必ずアプリケーションのコンパイル・実行はコンテナ上で行い、原則ホストOSでパッケージをインストールしてはいけない
コンテナで使用しているイメージは変更してはいけない
WebAppの構成ファイルのみを修正し、他の構成ファイルは変更してはいけない

ゴール

http://192.168.0.1:8080/index にアクセスしたときスコアボードが正常に表示される

情報

IPアドレス: 192.168.0.1
ユーザー名: admin
パスワード: 248b1fa8f258

Dockerfile

FROM golang:alpine
ADD ./Score /work
WORKDIR /work
RUN go build -tags netgo -o webapp main.go

FROM busybox
ENV GOPATH=/usr/local/bin/
COPY --from=builder /work/exec-webapp.sh /usr/local/bin/
ENTRYPOINT ["/usr/local/bin/exec-webapp.sh", "/usr/local/bin/webapp"]

解答

お世話になります。:thonk_spin.ex-large.rotate.parrot:です。
問題「コンテナが作れない」の解答を送らせていただきます。

修正後のDockerfile

FROM golang:alpine AS builder RUN apk add --update --no-cache git ADD ./Score /work WORKDIR /work RUN go get github.com/garyburd/redigo/redis \ github.com/gin-gonic/gin \ github.com/go-gorp/gorp \ github.com/go-sql-driver/mysql RUN go build -tags netgo -o webapp main.go FROM busybox ENV GOPATH=/usr/local/bin/ COPY --from=builder /work/exec-webapp.sh /usr/local/bin/ RUN chmod +x /usr/local/bin/exec-webapp.sh COPY --from=builder /work/webapp /usr/local/bin/ COPY --from=builder /work/views /usr/local/bin/views COPY --from=builder /work/themes /usr/local/bin/themes ENTRYPOINT ["/usr/local/bin/exec-webapp.sh", "/usr/local/bin/webapp"]

原因とその解決

  1. goアプリのビルドの際に必要な依存パッケージがダウンロードできていなかった

    • go getコマンドで必要な依存パッケージをダウンロードした(5~8行目)
    • この際、go getコマンドを実行するためにRUN apk add --update --no-cache gitgitをインストールした(2行目)
  2. ビルドステージの名前が設定されていなかった

    • AS句でbuilderという名前を指定した(1行目)
  3. /usr/local/bin/exec-webapp.shに実行権限が付与されていなかった

    • chmodコマンドを実行して付与した(14行目)
  4. 実行イメージ内にアプリの実行に必要なファイル(webappバイナリ, viewsディレクトリ, themesディレクトリ)が配置されていなかった

    • COPY命令で必要ファイルをビルドステージからコピーした(15~17行目)
Select a repo