我正在尝试将Glide添加到我的Golang项目中,但我没有让我的容器工作。我目前正在使用:
# create image from the official Go image
FROM golang:alpine
RUN apk add --update tzdata bash wget curl git;
# Create binary directory, install glide and fresh
RUN mkdir -p $$GOPATH/bin
RUN curl https://glide.sh/get | sh
RUN go get github.com/pilu/fresh
# define work directory
ADD . /go
WORKDIR /go/src
RUN glide update && fresh -c ../runner.conf main.go
根据@craigchilds94的帖子。我跑的时候
docker build -t docker_test .
一切正常。但是,当我将最后一行从RUN glide ...
更改为CMD glide ...
,然后使用以下内容启动容器时
docker run -it --volume=$(PWD):/go docker_test
它给了我一个错误:/bin/sh: glide: not found
。忽略glide update
并直接启动相同的新结果:/bin/sh fresh: not found.
最终目标是能够安装一个卷(用于实时重载)并能够在docker-compose中使用它,所以我希望能够构建它,但我不明白出了什么问题。
答案 0 :(得分:2)
这可能适用于您的目的:
# create image from the official Go image
FROM golang:alpine
RUN apk add --update tzdata bash wget curl git;
# Create binary directory, install glide and fresh
RUN go get -u github.com/Masterminds/glide
RUN go get -u github.com/pilu/fresh
# define work directory
ADD . /go
WORKDIR /go/src
ENTRYPOINT $GOPATH/bin/fresh -c /go/src/runner.conf /go/src/main.go
据我所知,你刚刚安装滑行后不需要运行滑行更新。你可以检查我写的使用滑动的Dockerfile: https://github.com/timogoosen/dockerfiles/blob/master/btcd/Dockerfile 这里是REAMDE:https://github.com/timogoosen/dockerfiles/blob/master/btcd/README.md
本文概述了CMD,RUN和入口点之间的区别:http://goinbigdata.com/docker-run-vs-cmd-vs-entrypoint/ 引用文章: “RUN在新图层中执行命令并创建新图像。例如,它通常用于安装软件包。” 在我看来,安装包和库可以在RUN中发生。 为了启动你的二进制文件或命令我建议使用ENTRYPOINT参见:“ENTRYPOINT配置一个将作为可执行文件运行的容器。”你也可以使用CMD来运行:
$GOPATH/bin/fresh -c /go/src/runner.conf /go/src/main.go
这样的事可能有用,我没有测试这部分:
CMD ["$GOPATH/bin/fresh", "-c", "/go/src/runner.conf /go/src/main.go"]