dar*_*men 7 unix cat docker dockerfile
我想启动这个无聊的命令cat(完美运行!)来用Dockerfile配置我的容器:
# Configure Virtualenvwrapper.
RUN cat <<EOF >> /home/docker/.bashrc
# Virtualenvwrapper configuration.
export WORKON_HOME=\$HOME/.virtualenvs
export PROJECT_HOME=\$HOME/Devel
source /usr/local/bin/virtualenvwrapper.sh
EOF
Run Code Online (Sandbox Code Playgroud)
但是,当我启动建筑图像泊坞窗时,出现此错误返回:
---> 40f9ed8e187d
Removing intermediate container 85f6c8536520
Step 69 : RUN cat <<EOF >> /home/docker/.bashrc
---> Running in dcbb3d441f79
---> 78acd9c2e5d5
Removing intermediate container dcbb3d441f79
Step 70 : EXPORT
Unknown instruction: EXPORT
Run Code Online (Sandbox Code Playgroud)
使用Dockerfile将cat命令unix运行到映像中的技巧是什么?
bha*_*ss1 26
更新 [08/03/2022]:截至dockerfile/dockerfile:1.4.0,Here-Document 支持已从labs 通道升级到 stable。第2589章
您需要通过在环境中设置来使用Docker Buildkit ,将语法解析器指令设置为 use ,并将此处分隔符的位置与 交换。其余的像平常一样使用。DOCKER_BUILDKIT=1dockerfile/dockerfile:1.4.0cat
Dockerfile 示例:
# syntax = docker/dockerfile:1.4.0
...
RUN <<EOF cat >> /home/docker/.bashrc
# Virtualenvwrapper configuration.
export WORKON_HOME=\$HOME/.virtualenvs
export PROJECT_HOME=\$HOME/Devel
source /usr/local/bin/virtualenvwrapper.sh
EOF
Run Code Online (Sandbox Code Playgroud)
在 之前dockerfile/dockerfile:1.4.0,实验室通道版本支持 Here-Document 语法dockerfile/dockerfile:1.3.0-labs。
只需替换syntax上面示例中解析器指令中使用的版本即可。
在 Docker BuildKit 实验室频道发布之前dockerfile/dockerfile:1.3.0-labs,不要使用cat,而是尝试使用echo!
转动这个 shellcat示例...
#!/usr/bin/env sh
cat <<EOF > /tmp/example.txt
line 1
line 2
line 3
EOF
Run Code Online (Sandbox Code Playgroud)
...进入这个 Dockerfileecho示例!
RUN echo -e '\
line 1\n\
line 2\n\
line 3\
' > /tmp/example.txt
Run Code Online (Sandbox Code Playgroud)
请注意示例中的一对单引号 ( ') echo。
另请注意支持转义换行符 ( )-e的标志。echo\n
注意:不幸的是,-e可能需要也可能不需要该标志,具体取决于echo安装的映像版本。例如,npm:16图像echo不需要并且实际上会与单引号行一起-e打印。-e另一方面,ubuntu:20.04图像echo确实需要-e.
相同的示例可以写在一行上:
RUN echo -e 'line 1\nline 2\nline 3' >> /tmp/example.txt,但我发现上面的示例更具可读性。
要回答OP的问题,请使用:
# Configure Virtualenvwrapper.
RUN echo -e '\
# Virtualenvwrapper configuration.\n\
export WORKON_HOME=\$HOME/.virtualenvs\n\
export PROJECT_HOME=\$HOME/Devel\n\
source /usr/local/bin/virtualenvwrapper.sh\
' >> /home/docker/.bashrc
Run Code Online (Sandbox Code Playgroud)
注意:转义字符可以通过escape指令重新定义。如果您的 Dockerfile 有不同的转义字符集,您需要相应地修改示例。
w11*_*00n 11
根据对Github上发布的问题的评论,此方法有效:
RUN echo 'All of your\n\
multiline that you ever wanted\n\
into a dockerfile\n'\
>> /etc/example.conf
Run Code Online (Sandbox Code Playgroud)
Dockerfile 不是批处理文件。每个行/命令都是隔离和提交的。
只需将内容放入文件并添加/复制它。如果您需要对其进行自定义,请对其进行 SED。或者,如果您真的、真的、真的想将 CAT 转换为一个文件——将它放入一个真正的批处理文件中,然后添加/复制它,然后运行它。
此外,更少的线条 = 更少的层数。70步?约兹人。
你可以这样写:
RUN echo "# Virtualenvwrapper configuration." >> /home/docker/.bashrc && \
echo "export WORKON_HOME=\$HOME/.virtualenvs" >> /home/docker/.bashrc && \
echo "export PROJECT_HOME=\$HOME/Devel" >> /home/docker/.bashrc && \
echo "source /usr/local/bin/virtualenvwrapper.sh" >> /home/docker/.bashrc
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10565 次 |
| 最近记录: |