目录
docker run指定的参数会覆盖Dockfile中CMD指定的参数。
ENTRYPOINT指定的参数不会被docker run后面的参数覆盖,而是会传递给ENTRYPOINT指定的参数。
参考文档
(100条消息) Dockerfile文件中CMD指令与ENTRYPOINT指令的区别_鳄鱼儿的博客-优快云博客_cmd entrypoint区别
CMD
CMD ["executable", "param1", "param2"] # exec form
CMD ["param1", "param2"] # as default parameters to ENTRYPOINT
CMD command param1 param2 # shell form
docker run指定的参数会覆盖Dockfile中CMD指定的参数。
编写Dockerfile
FROM busybox:latest
RUN cd /
CMD ["ls", "-l"]
制作镜像并运行
docker build -t test1 . # 制作镜像
docker run test1 # 运行, 执行的命令为 ls -l
# 运行结果
# drwxr-xr-x 2 root root 12288 Jun 6 22:13 bin
# drwxr-xr-x 5 root root 340 Jun 30 17:11 dev
# drwxr-xr-x 1 root root 4096 Jun 30 17:11 etc
# drwxr-xr-x 2 nobody nobody 4096 Jun 6 22:13 home
# dr-xr-xr-x 93 root root 0 Jun 30 17:11 proc
# drwx------ 2 root root 4096 Jun 6 22:13 root
# dr-xr-xr-x 13 root root 0 Jun 1 15:24 sys
# drwxrwxrwt 2 root root 4096 Jun 6 22:13 tmp
# drwxr-xr-x 3 root root 4096 Jun 6 22:13 usr
# drwxr-xr-x 4 root root 4096 Jun 6 22:13 var
覆盖参数
docker run test1 -a # 这个时候实际执行的命令为"-a",当然系统中没这个命令,报错。
# 报错如下
# docker: Error response from daemon: failed to create shim: OCI runtime create failed:
# container_linux.go:380: starting container process caused: exec: "-a": executable file
# not found in $PATH: unknown.
修改参数,重新运行
docker run test1 ls -a # 这个时候实际执行的命令为 ls -a, 而不是 ls -l
# 结果如下
# .
# ..
# .dockerenv
# bin
# dev
# etc
# home
# proc
# root
# sys
# tmp
# usr
# var
ENTRYPOINT
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2
ENTRYPOINT指定的参数不会被docker run后面的参数覆盖,而是会传递给ENTRYPOINT指定的参数。
编写Dockerifle
FROM busybox:latest
RUN cd /
ENTRYPOINT ["ls", "-l"]
制作镜像并运行
docker build -t test2 .
docker run test2 -a
# 执行结果
# total 44
# drwxr-xr-x 1 root root 4096 Jun 30 17:38 .
# drwxr-xr-x 1 root root 4096 Jun 30 17:38 ..
# -rwxr-xr-x 1 root root 0 Jun 30 17:38 .dockerenv
# drwxr-xr-x 2 root root 12288 Jun 6 22:13 bin
# drwxr-xr-x 5 root root 340 Jun 30 17:38 dev
# drwxr-xr-x 1 root root 4096 Jun 30 17:38 etc
# drwxr-xr-x 2 nobody nobody 4096 Jun 6 22:13 home
# dr-xr-xr-x 98 root root 0 Jun 30 17:38 proc
# drwx------ 2 root root 4096 Jun 6 22:13 root
# dr-xr-xr-x 13 root root 0 Jun 1 15:24 sys
# drwxrwxrwt 2 root root 4096 Jun 6 22:13 tmp
# drwxr-xr-x 3 root root 4096 Jun 6 22:13 usr
# drwxr-xr-x 4 root root 4096 Jun 6 22:13 var