本記事は ディップ 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コマンドで自分の場所を取得すれば問題ない。
まとめ
メラーメッセージはしっかり読もう。