Linux Dockerfile可以';无法在生成时找到shell脚本

Linux Dockerfile可以';无法在生成时找到shell脚本,linux,bash,shell,docker,go,Linux,Bash,Shell,Docker,Go,我正在尝试docker构建一个利用go的应用程序。要安装go,dockerfile具有以下命令(顺便说一句,该命令执行良好): 当脚本在“install”子目录中运行shell文件时,会出现问题。注意,以下两个步骤的输出: Step 9/13 : RUN . install/install-lmdb-linux.sh ---> Running in 0c666807720a : not found install/install-lmdb-linux.sh: : not found in

我正在尝试docker构建一个利用go的应用程序。要安装go,dockerfile具有以下命令(顺便说一句,该命令执行良好):

当脚本在“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
另外,请注意,当我手动运行这两个脚本时,它们都能完美执行

问题:
为什么我的构建失败了?Docker似乎有脚本、执行它们的工具和正确的指令,所以我不知道如何处理这个问题。

如果您不想使用绝对路径。 有一个用于更改工作目录的命令

WORKDIR /your/directory
然后使用RUN执行shell命令


参考资料:

如果可能,您是否尝试过使用完整路径?@Aserre
步骤9/13:运行C:/Users/mikof/Documents/WINGO/Docker/bystro/install/install-lmdb-linux.sh--->在f1a9d78df5cd/bin/sh中运行:1:C:/Users/mikof/Documents/WINGO/Docker/bystro/install/install-lmdb-linux.sh:未找到命令'/bin/sh-CC:/Users/mikof/Documents/WINGO/Docker/bystro/install/install lmdb linux.sh'返回了一个非零代码:127。使用前请先转换为Unix文件格式,或者更好的做法是,不要使用Windows。仍然存在127退出代码错误
RUN
命令中的路径应指向Docker映像中的路径,而不是运行此命令时主机上的路径。注意,我不认为我使用的是绝对路径。我使用的命令是:
RUN。安装/安装lmdb linux.sh
。此外,路径本身似乎是正确的,因为
runls install/
返回了正确的文件名(如问题中所述)。
Step 12/15 : RUN go version
 ---> Running in b8b9d08ef9c3
go version go1.11 linux/amd64
WORKDIR /your/directory