gpt4 book ai didi

docker - 将 RUN 更改为 CMD 会阻止容器工作

转载 作者:行者123 更新时间:2023-12-02 21:17:10 25 4
gpt4 key购买 nike

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

最佳答案

这可能适用于您的目的:

# 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

据我所知,您不需要在刚安装 glide 后运行 glide 更新。你可以查看我写的这个使用 glide 的 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"]

关于docker - 将 RUN 更改为 CMD 会阻止容器工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49842730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com