在Dockerfile中启动CAT命令unix

在Dockerfile中启动CAT命令unix,unix,docker,dockerfile,cat,Unix,Docker,Dockerfile,Cat,我想启动这个vagrant命令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

我想启动这个vagrant命令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
#配置VirtualInvrapper。
运行cat/home/docker/.bashrc
#虚拟说唱者配置。
导出WORKON\u HOME=\$HOME/.virtualenvs
导出项目\u HOME=\$HOME/Devel
source/usr/local/bin/virtualenvwrapper.sh
EOF
但是,当我启动我的建筑图像docker时,返回以下错误:

 ---> 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
-->40f9ed8e187d
拆卸中间容器85f6c8536520
步骤69:运行cat/home/docker/.bashrc
--->在dcbb3d441f79中运行
--->78acd9c2e5d5
拆卸中间容器dcbb3d441f79
步骤70:出口
未知指令:导出

在带有Dockerfile的映像中运行cat命令的诀窍是什么?

Dockerfile不是批处理文件。每一行/命令都是隔离和提交的

只需将内容放入文件并添加/复制即可。如果您需要自定义它,请单击它。或者,如果你真的,真的,真的想把它放到一个文件中——把它放到一个真正的批处理文件中,然后添加/复制它,然后运行它

而且,线越少,层就越少。70步?尤泽斯

根据发布在Github上的一个问题,这是有效的:

RUN echo 'All of your\n\
multiline that you ever wanted\n\
into a dockerfile\n'\
>> /etc/example.conf

你可以这样写:

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

您也可以使用下面的命令来代替heredocument。此外,您还必须在启用interactive标志的情况下运行.bashrc。制作一些适当的执行脚本,以确保环境变量设置正确-与容器中的.bashrc“magic”相比。如果多行以
#
字符开头,则这不起作用。在这种情况下,可以重新排列字符串。例如,
echo'\[NL]#/bin/bash\n'
可以重写为
echo'\[NL]/bin/bash\n'
,其中
[NL]
表示Dockerfile中的换行符。echo命令必须与-e选项一起使用,以接受换行符
\n
或制表符
\t
字符<代码>回声-e。。。
RUN echo $'[kubernetes] \n\
name=Kubernetes \n\
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 \n\
enabled=1 \n\
gpgcheck=1 \n\
repo_gpgcheck=1 \n\
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg \n '\
> /etc/yum.repos.d/kubernetes.repo