登录
首页 >  Golang >  Go问答

Dockerfile 编译时无法找到 shell 脚本

来源:stackoverflow

时间:2024-03-18 13:03:29 382浏览 收藏

在 Docker 构建过程中,使用 shell 脚本时遇到问题,脚本无法找到且构建失败。尽管脚本在运行时存在,但构建仍以 127(命令未找到)的退出代码失败。通过检查脚本和 go 的存在性,发现问题不在于文件或工具的可用性。更改工作目录并使用绝对路径执行脚本是可能的解决方案。

问题内容

我正在尝试使用 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 似乎有脚本、执行它们的工具以及执行此操作的正确指令,所以我不确定如何处理这个问题。


解决方案


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

WORKDIR /your/directory

然后使用 run 执行 shell 命令

参考:Change directory command in Docker?

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>