为什么在dockerfile运行指令的/ bin / bash -c“…”部分中,echo $ VARIABLE,在docker build上返回空?
题 :
观察--- echo home
和--- env
之间的输出(见下面), $GOPATH
被明确定义为$HOME
。 另外, echo $HOME
的输出在--- start
和--- echo home
之间是可见的。 但是,在--- env
和--- echo gopath
之间echo $GOPATH
的输出是空的。 为什么?
细节 :
Dockerfile RUN指令有问题
RUN /bin/bash -c "echo '-------------------------------------------- start' ;\ echo $HOME ;\ echo '-------------------------------------------- echo home' ;\ source $HOME/.gvm/scripts/gvm ;\ gvm use go1.5.1 ;\ env ;\ echo '-------------------------------------------- env ' ;\ echo $GOPATH ;\ echo '-------------------------------------------- echo gopath' ;\ "
Docker构build步骤超出上述说明
Step 5 : RUN /bin/bash -c "echo '-------------------------------------------- start' ; echo $HOME ; echo '-------------------------------------------- echo home' ; source $HOME/.gvm/scripts/gvm ; gvm use go1.5.1 ; env ; echo '-------------------------------------------- env ' ; echo $GOPATH ; echo '-------------------------------------------- echo gopath' ; " ---> Running in c079d62aa7eb -------------------------------------------- start /home/amebel -------------------------------------------- echo home Now using version go1.5.1 HOSTNAME=e611e15f9c9d GVM_ROOT=/home/amebel/.gvm LD_LIBRARY_PATH=/home/amebel/.gvm/pkgsets/go1.5.1/global/overlay/lib: PATH=/home/amebel/.gvm/pkgsets/go1.5.1/global/bin:/home/amebel/.gvm/gos/go1.5.1/bin:/home/amebel/.gvm/pkgsets/go1.5.1/global/overlay/bin:/home/amebel/.gvm/bin:/home/amebel/.gvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin GVM_VERSION=1.0.22 PWD=/home/amebel gvm_pkgset_name=global SHLVL=1 HOME=/home/amebel GOROOT=/home/amebel/.gvm/gos/go1.5.1 DYLD_LIBRARY_PATH=/home/amebel/.gvm/pkgsets/go1.5.1/global/overlay/lib: gvm_go_name=go1.5.1 GVM_OVERLAY_PREFIX=/home/amebel/.gvm/pkgsets/go1.5.1/global/overlay PKG_CONFIG_PATH=/home/amebel/.gvm/pkgsets/go1.5.1/global/overlay/lib/pkgconfig: GOPATH=/home/amebel/.gvm/pkgsets/go1.5.1/global GVM_PATH_BACKUP=/home/amebel/.gvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin _=/usr/bin/env -------------------------------------------- env -------------------------------------------- echo gopath ---> db5582b888ab Removing intermediate container c079d62aa7eb Successfully built db5582b888ab ---- Finished build of amebel/golang ----
提前致谢
由于你的string是用双引号括起来的,因此它的variables将由运行命令的原始shell来扩展,而不是由bash -c
调用的shell来扩展。 GOPATH
没有在原来的shell中定义。
将参数放在bash -c
中,而不是双引号,而是直接传递给bash
。
RUN /bin/bash -c 'echo "-------------------------------------------- start" ;\ echo $HOME ;\ echo "-------------------------------------------- echo home" ;\ source $HOME/.gvm/scripts/gvm ;\ gvm use go1.5.1 ;\ env ;\ echo "-------------------------------------------- env " ;\ echo $GOPATH ;\ echo "-------------------------------------------- echo gopath" ;\ '