1. ホーム
  2. docker

[解決済み] DockerfileのCMD内で変数を使用するにはどうすればよいですか?

2022-05-01 19:37:03

質問

私のDockerfileの中です。

ENV PROJECTNAME mytestwebsite
CMD ["django-admin", "startproject", "$PROJECTNAME"]

エラーです。

CommandError: '$PROJECTNAME' is not a valid project name

ここで一番手っ取り早い回避策は何でしょうか? Dockerはこの機能を修正したり、Dockerの将来のバージョンで導入する予定はありますか?

注:Docker ファイルから CMD 行を削除してから Docker コンテナを実行すると、コンテナ内から Django-admin startproject $PROJECTNAME を手動で実行でき、プロジェクトが作成されます...。

どうすればいいですか?

実行リストを使用する場合、以下のようになります。

CMD ["django-admin", "startproject", "$PROJECTNAME"]

...すると、Dockerは与えられたコマンドを実行します。 直接 シェルを介さずに、です。 シェルが介在しないので、つまりは

  • 変数の展開がない
  • ワイルドカード展開なし
  • での入出力リダイレクトはありません。 > , < , | など
  • による複数コマンドは不可。 command1; command2
  • といった具合に。

もし、あなたの CMD を変数に展開するには、シェルを手配する必要があります。 それはこんな風にすればいい。

CMD ["sh", "-c", "django-admin startproject $PROJECTNAME"]

また、実行リストの代わりに単純な文字列を使っても、前の例とほぼ同じ結果が得られます。

CMD django-admin startproject $PROJECTNAME