我無法創建,並在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
如果我把上面一行是:
RUN fn=$(filename $s)
我得到這個錯誤:
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
任何人都知道正確的方法來
- 創建內部變量碼頭文件
使用字符串插值與變量,這樣我可以參考的變量在入口點的參數如下所示:
入口點[「/斌/慶典」,「/家庭/ NEWUSER/$ VAR」]
即使我這樣做:
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
即使我使用的入口點的「非JSON」版本
,它似乎仍然沒有回暖的$sname
變量的值。
那麼爲什麼不是ARG,一個構建時參數,可用於ENTRYPOINT參數插值,也可以在構建時? 我只是在Dockerfile中尋找某種變量,所以我不必在整個地方複製和粘貼相同的字符串,而無需使用某種外部模板工具。 我想知道爲什麼這個功能被添加,如果它不一致可用。 – pdxleif
這個問題應該指向碼頭工作組。我必須看看再次添加了「ARG」的公關,但如果我的記憶是正確的,這種可能性甚至沒有討論過。 Docker開發者在GitHub上非常活躍,所以在那裏問問。 – Villlem