CMD和ENTRYPOINT命令
CMD命令
CMD命令在使用时,有三个基本原则需要我们遵守。
- 容器启动时默认执行的命令
- 如果
docker container run启动容器时指定了其它命令,则CMD命令会被忽略- 如果定义多个CMD,只有最后一个CMD执行
app.js
let koa = require("koa")
let Router = require("koa-router")
const app = new koa();
const router = new Router();
router.get("/", async ctx => {
ctx.body = "村望老弟的Docker测试服务器测试数据"
})
app.use(router.routes())
app.listen({
port: 3000
}, () => {
console.log("村望老师的Docker测试服务器跑起来啦");
})
dockerfile
FROM node:15.10.0-slim
ADD ./app.tar.gz /app
WORKDIR /app
RUN npm install --registry=https://registry.npm.taobao.org
CMD node app.js

容器启动的时候执行CWD
ENTRYPOINT命令
ENTRYPOINT也可以设置容器启动时要执行的命令。使用起来的语法很简单
ENTRYPOINT和CMD的区别
CMD设置的命令,可以在docker container run时传入其它命令,覆盖掉CMD的命令,但是ENTRYPOINT所设置的命令时一定会被执行的。先看
CMD配置的命令dockerfile.cmdFROM ubuntu:21.04 CMD ["echo","hello docker"]构建镜像
docker image build -f dockerfile.cmd -t cmd-test .
codehope ~/CunWangOwn/docke-file-test docker run cmd-test hello docker但是我们可以在
run的时候去覆盖内部的CMD命令codehope ~/CunWangOwn/docke-file-test docker run cmd-test ls bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var可以看到
CMD ["echo","hello docker"]并没有执行!然后看
ENTRYPOINT配置的命令dockerfile.entrypointFROM ubuntu:21.04 ENTRYPOINT ["echo","hello docker"]构建镜像
docker image build -f dockerfile.entrypoint -t entry-test .运行镜像
codehope ~/CunWangOwn/docke-file-test docker run entry-test ls hello docker ls发现无法被覆盖,好像能传参数的赶脚?
ENTRYPOINT和CMD可以联合使用,ENTRYPOINT设置执行的命令,CMD传递参数。dockerfile.cmdentrymixFROM ubuntu:21.04 ENTRYPOINT ["echo"] CMD []构建镜像
docker image build -f dockerfile.cmdentrymix -t cemixin .运行镜像
codehope ~/CunWangOwn/docke-file-test docker run cemixin input input
本作品采用《CC 协议》,转载必须注明作者和本文链接
关于 LearnKu