首页 > 解决方案 > Docker COPY 没有复制脚本

问题描述

Docker COPY 没有复制 bash 脚本

FROM alpine:latest

#Install Go and Tini - These remain.
RUN apk add --no-cache go build-base gcc go

RUN apk add --no-cache --update ca-certificates redis git && update-ca-certificates

# Set Env Variables for Go and add Go to Path.
ENV GOPATH /go
ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH

RUN go get github.com/rakyll/hey

RUN echo GOLANG VERSION `go version`
COPY ./bench.sh /root/bench.sh
RUN chmod +x /root/bench.sh
ENTRYPOINT /root/bench.sh

这是脚本 -

#!/bin/bash
set -e;

echo "entered";

hey;

我尝试运行上面的 Dockerfile

$ docker build -t test-bench .
$ docker run -it test-bench

但我得到了错误

/bin/sh: /root/bench.sh: not found

该文件确实存在 -

$ docker run --rm -it test-bench sh
/ # ls
bin    dev    etc    go     home   lib    media  mnt    opt    proc   root   run    sbin   srv    sys    tmp    usr    var
/ # cd root
~ # ls
bench.sh
~ #

标签: dockerdockerfile

解决方案


是你的docker build成功。当我试图模拟这个时,发现以下错误

 ---> Running in 96468658cebd
go: missing Git command. See https://golang.org/s/gogetcmd
package github.com/rakyll/hey: exec: "git": executable file not found in $PATH
The command '/bin/sh -c go get github.com/rakyll/hey' returned a non-zero code: 1

尝试git使用 Dockerfile安装RUN apk add --no-cache go build-base gcc go git并再次运行。

这里的COPY操作似乎是正确的。确保它存在于docker build执行的目录中。


好的,脚本使用/bin/bash的 bash 二进制文件在 alpine 映像中不可用。要么必须安装它,要么/bin/sh应该使用外壳


推荐阅读