将RUN更改为CMD会阻止容器运行

时间:2018-04-15 13:53:57

标签: docker dockerfile

我正在尝试将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中使用它,所以我希望能够构建它,但我不明白出了什么问题。

1 个答案:

答案 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"]