-2

我有一个看起来像这样的 Dockerfile:

FROM quorumengineering/quorum:latest

RUN apk add nodejs npm
RUN cd ~
RUN npm i axios
COPY watcher.js .
ENTRYPOINT [ "geth", "--raft", "--raftjoinexisting", "1" ]
CMD "node watcher.js"

我想要实现的是使用参数运行 geth 然后运行 ​​nodejs appwatcher.js

容器映像正在正确构建,使用命令:

docker build -t somename .

它正在使用以下命令正确启动:

docker run -d somename

但是当我docker exec -it containerID sh运行 ps 我得到:

/ # ps
PID   USER     TIME  COMMAND
    1 root      0:01 geth --raft --raftjoinexisting 1 /bin/sh -c "node watcher.js"
   16 root      0:00 sh
   23 root      0:00 ps

看起来它在一行中运行了两个命令......geth命令运行完美,但 nodejs 应用程序没有启动......docker logs没有给我任何有趣的输出。

4

1 回答 1

2

入口点设置容器运行时将首先执行的命令和参数。

CMD 在执行容器时提供默认值。这些将在入口点之后执行。

Docker 建议使用 ENTRYPOINT 设置镜像的主命令,然后使用 CMD 作为默认标志。这是一个使用这两个指令的示例 Dockerfile。

FROM ubuntu
ENTRYPOINT ["top", "-b"]
CMD ["-c"]

我建议您使用所需的启动命令创建一个 bash 脚本,将其添加到容器中并在 CMD 或 ENTRYPOINT 中使用它。

于 2019-02-27T13:31:57.850 回答