コンテナでAlpine Linuxを使用しています。ENV PATH="~/.local/bin:$PATH" \
私のDockerfileに
シェルにログインすると、正常に同じようにls ~/.local/bin
ターゲットls /root/.local/bin
バイナリがあります。
しかし、バイナリを直接呼び出しています。それ以外の場合はwhich mybin
動作しません。明示的に追加しても/root/.local/bin
大丈夫です。
~/.local/bin
andが/root/.local/bin
同じので、なぜこれが起こるのかわかりません。
どんなアイデアがありますか?ありがとうございます!
編集する:
重複したリンクを介して何が起こっているのかについての洞察を得ることができましたが、それが主な理由ではないことがわかりました。 DockerfileENV
の指示はシェル拡張を実行しないため、引用符を削除しても機能しません。
動作しているように見える唯一の方法は、ディレクティブでexport &&
使用することですCMD
。
また、指示に$HOME
従わないでください。ENV
答え1
$HOME
どのシェルを使用しているかはわかりませんが、bashと仮定すると、インタラクティブなコマンドライン以外の場所では~
使用するのが安全ではないことを指定する必要があります。~
スクリプト内の一部の場所~
も機能しますが、変数内で定義すると、経験したように予期しない結果が生じる可能性があります。
$PATH
内容が何であるかを確認するために再エコーすることもできます。
echo $PATH
~/.local/bin
現在の実装では文字通り拡張されず、パスが含まれることがわかります。/root/.local/bin
~