如何在dockerfile中重新加载.bashrc

问题描述 投票:0回答:2

我在 Dockerfile 中的 .bashrc 中添加了许多内容,这是执行我稍后要在 Dockerfile 中运行的一些命令所必需的,
我尝试了

source .bashrc
,但不起作用。
我尝试使用
RUN /bin/bash -c --login ...
但出现错误:
mesg: ttyname failed: inappropriate ioctl for device

bash docker dockerfile
2个回答
11
投票

Dockerfile 中的每个命令都会创建一个新的临时容器,但没有 tty(issue 1870,在 PR 4955 中讨论,但已关闭以支持 PR 4882)。

docker 构建期间缺少 tty 会触发

ttyname failed: inappropriate ioctl for device
错误消息。

您可以尝试运行一个包装脚本,其中将获取

.bashrc

Dockerfile

COPY myscript /path/to/myscript
RUN /path/to/myscript

myscript

#!/bin/bash
source /path/to/.bashrc
# rest of the commands    

Abderrahim在评论中指出

在我的例子中,它是

for nvm

:它将 init
 脚本添加到 
.bashrc
,因此它在 Dockerfile 上下文中不可用。
最终使用它的依赖命令制作了一个安装脚本。


0
投票
我们可以使用

$BASH_ENV

 来解决这个问题

FROM ubuntu SHELL ["/bin/bash", "-c"] ENV BASH_ENV="/tmp/vars" RUN echo "export MY_VAR=my_value" >> $BASH_ENV RUN echo "export MY_VAR2=my_value2" >> $BASH_ENV RUN echo "MY_VAR = $MY_VAR" RUN echo "MY_VAR2 = $MY_VAR2"
#7 [4/5] RUN echo "MY_VAR = $MY_VAR"
#7 0.313 MY_VAR = my_value
#7 DONE 0.3s

#8 [5/5] RUN echo "MY_VAR2 = $MY_VAR2"
#8 0.297 MY_VAR2 = my_value2
#8 DONE 0.3s
参考

  • Dockerfile 即使在单个子 shell 中也不会获取 .bashrc
© www.soinside.com 2019 - 2024. All rights reserved.