【发布时间】:2018-07-06 17:09:56
【问题描述】:
使用以下 dockerfile:
FROM golang:1.9 AS build-go
RUN go get github.com/grafana/grafana; exit 0
WORKDIR $GOPATH/src/github.com/grafana/grafana
RUN go run build.go setup
RUN go run build.go build
FROM node:8 AS build-node
COPY --from=build-go $HOME/go/src/github.com/grafana/grafana .
RUN npm install -g yarn
RUN yarn install --pure-lockfile
CMD npm run watch
EXPOSE 3000
我创建了一个镜像,然后通过 bash 文件来启动一个容器:
docker run -d -P --name=grafanabuildfromsrc myimg
docker exec grafanabuildfromsrc ./bin/linux-amd64/grafana-server
./bin/linux-amd64/grafana-server 需要npm run build 一次完成所有文件的构建。当前脚本将在构建完成之前执行它。
我想要的是,在执行 bash 文件中的第二个命令之前,它应该等待容器内的命令首先完成。这可能吗?
一个可能很重要的提示:grafana-server 在npm run watch 未完成时表示"Failed to detect generated javascript files in public/build。
我如何做到这一点?
【问题讨论】:
-
以我有限的经验,运行一个 Docker 镜像然后立即尝试
docker exec里面的东西充其量是不可靠的。也许我应该再试一次。你可以先做一个简单的docker run -P --name whatever someimage sh -c 'sleep 3600'; docker exec whatever sh -c 'echo success'吗? -
我也同意
docker exec不是您正在寻找的工具。事实上,由于 Docker 映像的内容是静态的,因此在文件系统更改时重建的“监视”类型操作可能也不是您想要的。看起来你最好颠倒这个 Dockerfile 的顺序:首先构建 JavaScript 部分,然后构建最终的应用程序,COPYingdist在那里构建的前端文件夹。 -
您可以将 && 用于需要在前一个命令成功时运行的序列操作。例如
./run_some_cmd && echo "previous cmd is successful -
@tripleee 是的,这可行。
-
@DavidMaze 不使用 go 构建文件,我如何
npm run?或者我可以吗?
标签: bash shell docker dockerfile grafana