从 Dockerfile 创建 bash 脚本会删除注释

jes*_*her 4 bash comments escaping docker dockerfile

我正在创建一个需要创建特定 bash 脚本的 Docker 容器。我在 Dockerfile 中使用了以下 RUN 语句:

RUN printf "#!/bin/bash\n \
# This is a bash comment inside the script\
ls -l" > /home/myuser/script.sh
Run Code Online (Sandbox Code Playgroud)

它运行良好,但生成的脚本只是:

#!/bin/bash
ls -l
Run Code Online (Sandbox Code Playgroud)

因此,最终文件中缺少 bash 注释。我怀疑原因是 Docker 假定该行是 Dockerfile 注释,但由于它包含在双引号内,我认为很明显事实并非如此。

当然,我可以通过将完整脚本包含在一行中或将其放置在外部文件中来解决这个问题,但我认为应该可以在多行引用字符串中包含 bash 注释而不会出现此类问题。任何解决方法?我尝试了各种转义,但都没有成功。

R0M*_*RMY 6

你是对的,Docker 将其解释为 Dockerfile 注释而不是字符串中的注释有点奇怪。作为一种解决方法,我有以下工作

FROM ubuntu:latest

RUN printf "#!/bin/bash \
\n# This is a bash comment inside the script \
\nls -l\n" > /script.sh

RUN cat /script.sh
Run Code Online (Sandbox Code Playgroud)

此输出中的结果

Step 3 : RUN cat /script.sh
 ---> Running in afc19e228656
#!/bin/bash 
# This is a bash comment inside the script 
ls -l
Run Code Online (Sandbox Code Playgroud)

如果您移到\n注释行的开头,它仍会生成正确的输出,但不再将该行视为 Dockerfile 注释行。


假设我找到了正确的命令解析代码,并且我正确阅读了它,Docker 会在尝试解析该行之前删除注释以查看它是否有任何命令。