docker run するときに repository name must be lowercase と /bin/bash: not found にハマり続けた話
前置き
ローカルのmysqlのバージョンに依存しているせいで、RDSに対してmysqlの操作ができませんでした。 そこで、mysqlとsshだけ実行できるdockerを用意すれば、ローカルが邪魔をせず、mysqlを扱えると思いました。
ところが。
docker run もうまく行かない・・・! 色んな記事を試してみたけどだめだ・・・!
ということで、しょーもない原因だったけど、記事にすることにしました。
参考: dockerfile
# mysql実行用Dockerfile FROM postgres:11-alpine # 基本ソフトインストール RUN apk add --no-cache \ bash \ mysql-client \ openssh-client # Langの設定 ENV LANG="ja_JP.UTF-8" LANGUAGE="ja_JP:ja" LC_ALL="ja_JP.UTF-8" # for JST TimeZone RUN apk --update-cache add --no-cache tzdata \ && cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime \ && echo "Asia/Tokyo" > /etc/timezone ENTRYPOINT xxx-xxx CMD []
repository name must be lowercase
出現エラー詳細
docker: invalid reference format: repository name must be lowercase.
よく検索に出る解決方法
- マウント(-v オプション)のパスを “” で囲う
今回の原因・解決方法
- エディタ上では全て半角スペースになっていたが、全部消してから半角スペース入れ直した → エディタ上で識別できない余計な文字があったのかも
/bin/bash: not found
出現エラー詳細
/bin/bash: line 1: xxx-xxx: not found
runコマンド
docker run \ --rm \ -it \ --name xxx-xxx \ -v $PWD:/workspace \ -v ~/.ssh:/root/.ssh \ -v ~/.aws:/root/.aws \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=pass \ xxx-xxx /bin/bash
でも
docker run \ --rm \ -it \ xxx-xxx
でもbashがnot found。dockerfileにちゃんとbashいれてるやん。なんで。
2個目に至ってはbin bashを打ってもいないのに。
今回の原因・解決方法
ENTRYPOINT xxx-xxx CMD []
これらをdockerfileに残していたのが原因(お手本にしたDockerfileに記述されていました)。
これらは、コンテナ起動したときに実行されるコマンドを指定するオプション。
なので、bashがnot foundではなく、xxx-xxx コマンドは無いよ!とbashが教えてくれていただけでした。というオチ。
なので、私と同様にdockerからssh接続してmysqlを使用したい方は、上記の「参考: dockerfile」からENTRYPOINTとCMDの記述を削除してください。
※ ちなみに
記述順番に限らず、実行の強さは ENTRYPOINT > CMD になる様子
最後に
コピペよりも最初から書いたほうが早いときもある。 害がない「だろう」で放置するオブションやコマンドが悪さすることもある。だろう運転だめ。