我正在尝试docker构建一个利用go的应用程序。要安装go,dockerfile具有以下命令(顺便执行此命令):
RUN wget https://dl.google.com/go/go1.11.linux-amd64.tar.gz \
&& tar -xf go1.11.linux-amd64.tar.gz \
&& mv go /usr/local
当脚本在“安装”子目录中运行外壳文件时,会出现问题。注意,输出以下两个步骤:
Step 9/13 : RUN . install/install-lmdb-linux.sh
---> Running in 0c666807720a
: not found install/install-lmdb-linux.sh:
: not found install/install-lmdb-linux.sh:
-e
Installing LMDB
Cloning into 'lmdb'...
: not found install/install-lmdb-linux.sh:
make: Entering directory '/root/bystro/lmdb/libraries/liblmdb'
gcc -pthread -O2 -g -W -Wall -Wno-unused-parameter -Wbad-function-cast -Wuninitialized -c mdb.c
gcc -pthread -O2 -g -W -Wall -Wno-unused-parameter -Wbad-function-cast -Wuninitialized -c midl.c
ar rs liblmdb.a mdb.o midl.o
ar: creating liblmdb.a
此shell脚本似乎失败了,但是以某种方式恢复(?),构建继续进行:
Step 11/13 : RUN . install/install-go-packages.sh
---> Running in 7700bf77c2b1
: not found install/install-go-packages.sh:
-e
Installing go packages (bystro-vcf, stats, snp)
: not found install/install-go-packages.sh:
: not found install/install-go-packages.sh:
: not found install/install-go-packages.sh:
Made /root/go path
: not found install/install-go-packages.sh:
: not found install/install-go-packages.sh:
: not found: install/install-go-packages.sh:
: not found: install/install-go-packages.sh:
: not found: install/install-go-packages.sh:
: not found: install/install-go-packages.sh:
: not found: install/install-go-packages.sh:
: not found: install/install-go-packages.sh:
The command '/bin/sh -c . install/install-go-packages.sh' returned a non-zero code: 127
此脚本是构建失败的地方,退出代码为127(找不到命令)。该脚本的任务基本上只是为应用安装一些依赖项。
弄乱了两个RUN函数的变化之后,我最终决定记录一些情况:检查运行时是否确实存在这两个Shell脚本,并查看运行时是否存在Go。都在场。
Step 9/15 : RUN ls install/
---> Running in 0f0ad051b009
export-bystro-libs.sh
export-go-path-linux.sh
install-apt-deps.sh
install-go-linux.sh
install-go-mac.sh
install-go-packages.sh
install-liftover-linux.sh
install-lmdb-linux.sh
install-mac-deps.sh
install-perl-libs.sh
install-perlbrew-linux.sh
install-rpm-deps.sh
update-packages.sh
Step 12/15 : RUN go version
---> Running in b8b9d08ef9c3
go version go1.11 linux/amd64
另外,请注意,当我手动运行它们时,两个脚本都能完美执行。
为什么我的构建失败?似乎Docker具有脚本,执行它们的工具以及执行该脚本的正确指令,因此我不确定如何实现此目的。
答案 0 :(得分:0)
如果您不想使用绝对路径。 有一个用于更改工作目录的命令
WORKDIR /your/directory
然后使用RUN来执行Shell命令