代码之家  ›  专栏  ›  技术社区  ›  kramer65

为什么Dockerfile中的命令失败,而在容器中手动运行它却能完美工作?

  •  1
  • kramer65  · 技术社区  · 6 年前

    我在创造一个简单的 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 回复  |  直到 6 年前
        1
  •  3
  •   LinPy    6 年前

    将此添加到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中提供系统变量的正确方法,source和export只在dockerfile中的一个步骤中工作

        2
  •  -1
  •   mayur lagad    6 年前

    请检查这个是否有效

    推荐文章