我有一个看起来像这样的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应用watcher.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
没有给我任何有趣的输出。
答案 0 :(得分:2)
Entrypoint设置运行容器时将首先执行的命令和参数。
CMD在执行容器时提供默认值。这些将在入口点之后执行。
Docker建议使用ENTRYPOINT设置映像的主命令,然后使用CMD作为默认标志。这是一个使用这两个指令的示例Dockerfile。
FROM ubuntu
ENTRYPOINT ["top", "-b"]
CMD ["-c"]
我建议您使用所需的启动命令创建bash脚本,将其添加到容器中,然后在CMD或ENTRYPOINT中使用它。