docker - CMD 出现问题,然后是 Dockerfile 中的 ENTRYPOINT
问题描述
我有一个看起来像这样的 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
没有给我任何有趣的输出。
解决方案
入口点设置容器运行时将首先执行的命令和参数。
CMD 在执行容器时提供默认值。这些将在入口点之后执行。
Docker 建议使用 ENTRYPOINT 设置镜像的主命令,然后使用 CMD 作为默认标志。这是一个使用这两个指令的示例 Dockerfile。
FROM ubuntu
ENTRYPOINT ["top", "-b"]
CMD ["-c"]
我建议您使用所需的启动命令创建一个 bash 脚本,将其添加到容器中并在 CMD 或 ENTRYPOINT 中使用它。
推荐阅读
- go-gorm - ERR:使用结构查询时where子句中的未知列
- c++ - 连接到 Internet 时由 Windows 发送的事件
- api - 在 RxJs 中获取更多数据
- php - phppresentation溢出表问题
- neo4j - 为标签/关系添加描述或评论
- wolfram-mathematica - 在 Mathematica 中为 ListStreamPlot 创建数据
- sql-server - Hangfire 重复性工作中断
- python - 终止(结束,杀死)python中的特定线程?
- windows - 调用 Microsoft Exchange 命令
- php - 在 Laravel 8 中下载数据库的 Excel 电子表格