内の文字列に私はトラブルDockerfileの変数を作成し、使用を持っています - 私は、このコマンドでDockerfileを通じてドッカーイメージを構築:はドッカー
$ docker build --build-arg s=scripts/a.sh -t a .
(だから私は--build-使用しているため、引数、$ sがDockerfileで利用可能な引数、およびこの部分の作品となります)
Dockerfileはそうのようなものです:
ARG s
RUN echo $s
RUN useradd -ms /bin/bash newuser
USER newuser
WORKDIR /home/newuser
ENV fn=$(filename $s) # fails on this line
COPY $s .
ENTRYPOINT ["/bin/bash", "/home/newuser/$fn"]
私が持っている問題は、ドッカービルドがfailinされていることですgを上に示した線上に置く。私はこれまでその行を変更した場合
Error response from daemon: Syntax error - can't find = in "$s)". Must be of the form: name=value
は:
Error: Command failed: docker build --build-arg s=scripts/a.sh -t a .
The command '/bin/sh -c fn=$(filename $s)' returned a non-zero code: 127
誰でも内部変数を作成します
- への正しい方法を知っている:
RUN fn=$(filename $s)
私はこのエラーを取得しますドッカーファイル
その変数と
使用文字列補間私はそうのようなENTRYPOINT引数に変数を参照できるように:
ENTRYPOINT [ "/ binに/ bashの"、 "/ホーム/ NEWUSER/$のVAR"]
私はこれを行う場合でも:私はENTRYPOINTの「非JSON」バージョンを使用していていても
ARG s
ARG sname
RUN echo $s # works as expected
RUN echo $sname # works as expected
RUN useradd -ms /bin/bash newuser
USER newuser
WORKDIR /home/newuser
COPY $s . # works as expected (I believe)
ENTRYPOINT /bin/bash /home/newuser/$sname # does not work as expected
を、まだ$sname
変数の値をピックアップしていないようです。
なぜ、ビルド時の引数であるENTRYPOINT引数に補間に使用できるビルド時の引数ではないのですか? ? Dockerfileで使用する変数を探していたので、外部のテンプレートツールを使用せずに、同じ文字列をコピーして貼り付ける必要はありません。 この機能が矛盾していると、なぜこの機能が追加されたのか不思議です。 – pdxleif
この質問は、ドッカーチームに指摘する必要があります。私は再びARGを加えたPRを見なければならないが、私の記憶が正しければ、この可能性について議論さえしなかった。ドッカーの開発者はGitHubで非常に積極的です。 – Villlem