チラプロ <チンチラといっしょにプログラミング>

チンチラと同棲するエンジニアが、勉強したことをまとめたり、チンチラを布教したりするブログです。

docker run するときに repository name must be lowercase と /bin/bash: not found にハマり続けた話

前置き

ローカルのmysqlのバージョンに依存しているせいで、RDSに対してmysqlの操作ができませんでした。 そこで、mysqlsshだけ実行できる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 になる様子

最後に

コピペよりも最初から書いたほうが早いときもある。 害がない「だろう」で放置するオブションやコマンドが悪さすることもある。だろう運転だめ。