我在 Dockerfile 中的 .bashrc 中添加了许多内容,这是执行我稍后要在 Dockerfile 中运行的一些命令所必需的,
我尝试了
source .bashrc
,但不起作用。RUN /bin/bash -c --login ...
但出现错误:mesg: ttyname failed: inappropriate ioctl for device
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 上下文中不可用。最终使用它的依赖命令制作了一个安装脚本。
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
参考