我正在为我的go应用程序编写一个dockerfile。在这里,我需要一个文件,它位于我的本地机器上的/home/saivamsi/.kube/config中。如果我直接在代码中使用它,它会显示一个错误,即找不到文件或目录。因此,我开始使用卷,但我不知道哪里出了问题,我无法在我的代码中使用该文件。
FROM golang:1.14.0
ENV HOMEABC=/home/saivamsi
WORKDIR /go/src/bifrost
VOLUME src="${HOMEABC}/.kube/config",target="/go/src/bifrost/config"
COPY --chown=bbadmin:bbadmin . /go/src/bifrost
COPY go.mod go.sum ./
RUN go mod download
RUN go build -o main .
#EXPOSE 8001
CMD ["./main"]
# CMD ["tail", "-f", "/dev/null"]发布于 2020-02-28 15:09:22
Dockerfile文件中VOLUME指令的使用不正确。Dockerfile reference for VOLUME声明:
主机目录是在容器运行时声明的:主机目录(挂载点)本质上依赖于主机。这是为了保持镜像的可移植性,因为给定的主机目录不能保证在所有主机上都可用。因此,您不能从Dockerfile中挂载主机目录。VOLUME指令不支持指定host-dir参数。您必须在创建或运行容器时指定装入点。
要在运行时将主机上的$HOME/.kube目录挂载到容器,可以在docker run命令中指定--volume或-v。
例如,您应该首先从Dockerfile文件中删除VOLUME指令。然后,您将运行类似于以下内容的代码:
docker run --volume $HOME/.kube:/go/src/bifrost <image name>这会将主机上的$HOME/.kube目录挂载到正在运行的容器中的/go/src/bifrost目录。然后,配置文件将在运行时出现在/go/src/bifrost/config中。
注意:仅当kube配置文件存在于运行容器的主机上时,此解决方案才有效。要将配置文件包含在镜像本身中,它必须存在于Docker构建上下文中。
https://stackoverflow.com/questions/60445901
复制相似问题