# コンテナが作れない ## 問題文 あなたは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 ```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 ```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 git`で`git`をインストールした(2行目) 2. ビルドステージの名前が設定されていなかった - `AS`句で`builder`という名前を指定した(1行目) 3. `/usr/local/bin/exec-webapp.sh`に実行権限が付与されていなかった - `chmod`コマンドを実行して付与した(14行目) 4. 実行イメージ内にアプリの実行に必要なファイル(`webapp`バイナリ, `views`ディレクトリ, `themes`ディレクトリ)が配置されていなかった - `COPY`命令で必要ファイルをビルドステージからコピーした(15~17行目)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up