びくんびくんしながらコードを書く。

いしきひくい系エンジニアのらくがき帳

dockerの検証をしてて詰まったのでメモ

本記事は ディップ with 全部俺 AdventCalendar 20日目の記事です。

自宅でdockerを使って開発環境を自力で作ろうとしててハマったのでメモとして残しておきます。

Dockerfile の用意

nodeを使った環境を作りたかったので下記の様なDockerfileを用意しました。

FROM node:lts-alpine

WORKDIR /app

RUN npm install -g yo generator-code

docker runで詰まったパターン

だめなパターン

docker イメージをビルドするために下記コマンドを実施

docker build -t hallo-vscode-extention:v0.0.1 ./

イメージができたのでrunしてみる

$ docker images
REPOSITORY                          TAG                 IMAGE ID            CREATED             SIZE
hello-vscode-extention              v0.0.1              4736a0b8d585        3 hours ago         151MB

$ docker run -t -i hello-vscode-extention /bin/sh

Unable to find image 'hello-vscode-extention:latest' locally
docker: Error response from daemon: pull access denied for hello-vscode-extention, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.
See 'docker run --help'.

そんなリポジトリ無いよと怒られる。
イメージをbuildするときにユーザ名を指定しなかったせいっぽい。
ちなみに下記コマンドだと通る。

$ docker run -t -i 4736a0b8d585 /bin/sh

※IMAGE ID直指定でのrun

いいパターン

$ docker build -t bikunbikun/hallo-vscode-extention:v0.0.1 ./

$ docker run -t -i bikunbikun/hello-vscode-extention /bin/sh

ユーザ名まで入れた状態でbuildしてるので問題ない。

ボリュームマウントについて

だめなパターン

ボリュームをマウントするときのパスしていを間違ってしまった

$ docker run -v ./:/app -it bikunbikun/hello-vscode-extention /bin/sh

docker: Error response from daemon: create ./: "./" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed. If you intended to pass a host directory, use absolute path.
See 'docker run --help'.

きちんと絶対パスを指定することとメッセージには出力されているのにガン無視してうんうんうなってしまった。

いいパターン

駄目なパターンで言及されているが、ちょっとしたテクニックを使うと他でも使い回しができるようになるコマンドになる

docker run -v $(pwd):/app -it bikunbikun/hello-vscode-extention /bin/sh

絶対パス指定なのでpwdコマンドで自分の場所を取得すれば問題ない。

まとめ

メラーメッセージはしっかり読もう。