为什么在容器中手动运行Dockerfile时,来自Dockerfile的命令会失败?

时间:2019-11-12 10:31:17

标签: linux bash docker debian

我正在创建一个简单的Dockerfile

FROM debian:buster

RUN apt update && apt upgrade -y

RUN apt install git golang -y
RUN echo "export GOPATH=$HOME" >> ~/.bash_profile
RUN source /root/.bash_profile
RUN echo $GOPATH

但是它在source /root/.bash_profile失败,并显示以下错误:

/bin/sh: 1: source: not found
The command '/bin/sh -c source /root/.bash_profile' returned a non-zero code: 127

我注释掉了这一行,构建了图像,然后从容器中运行了相同的命令,然后运行正常。

我尝试了许多变体,包括手动调用/bin/bash,但似乎无法在Dockerfile中使用。

有人知道我在做什么错吗?

[编辑]

我还尝试用以下方式替换该行

RUN export GOPATH=$HOME

RUN export GOPATH=/root

但是它之后的回声给出了空的结果。

2 个答案:

答案 0 :(得分:3)

将此添加到您的dockerfile中:

FROM debian:buster

RUN apt update && apt upgrade -y

RUN apt install git golang -y
ARG GOPATH=/PATH/TO/
ENV GOPATH ${GOPATH}
RUN echo $GOPATH

这是在Docker中提供系统变量的正确方法,源和导出只能在dockerfile中一步完成

答案 1 :(得分:-1)

请检查是否可行 运行/ bin / bash -c“源/root/.bash_profile”