【发布时间】:2019-08-20 15:45:50
【问题描述】:
我正在尝试使用 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
当脚本在 'install' 子目录中运行 shell 文件时会出现问题。注意,以下两步的输出:
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 有脚本、执行它们的工具以及执行此操作的正确指令,所以我不知道如何处理。
【问题讨论】:
-
您是否尝试过尽可能使用完整路径?
-
@Aserre
Step 9/13 : RUN C:/Users/mikof/Documents/WINGO/Docker/bystro/install/install-lmdb-linux.sh ---> Running in f1a9d78df5cd /bin/sh: 1: C:/Users/mikof/Documents/WINGO/Docker/bystro/install/install-lmdb-linux.sh: not found The command '/bin/sh -c C:/Users/mikof/Documents/WINGO/Docker/bystro/install/install-lmdb-linux.sh' returned a non-zero code: 127 -
您的某些输入文件中似乎有 DOS 回车符。使用前转换为 Unix 文件格式,或者更好的是,根本不要使用 Windows。
-
还有127退出码错误
-
RUN命令中的路径应该是指 Docker 镜像中的路径,而不是你运行它的主机上的路径。
标签: linux bash shell docker go