1. 程式人生 > 實用技巧 >DockerFile----CMD和ENTRYPOINT區別案例

DockerFile----CMD和ENTRYPOINT區別案例

CMD和ENTRYPOINT區別案例

1.使用CMD指令,實現執行容器查當前IP的功能
FROM centos:7

RUN yum -y install curl
CMD ["curl","-s","https://www.cip.cc/"]

[root@aaa ~/mydocker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mycentos            02                  520e36902f2a        31 seconds ago      290 MB
[root@aaa ~/mydocker]# docker run -it mycentos:02
IP      : 39.90.13.119
地址    : 中國  山東  聊城
運營商  : 聯通

如果加個引數“-i”,就會報錯

[root@aaa ~/mydocker]# docker run -it mycentos:02 -i
/usr/bin/docker-current: Error response from daemon: oci runtime error: container_linux.go:235: starting container process caused "exec: \"-i\": executable file not found in $PATH".

原因:“-i”引數替換了原來的CMD,而不是新增到原來的curl -s http://www.cip.cc 後面
如果希望加入-i這個引數,就必須輸入完整的命令

[root@aaa ~/mydocker]# docker run -it 520e36902f2a curl -s http://www.cip.cc -i
HTTP/1.1 200 OK
Server: openresty
Date: Thu, 06 Aug 2020 13:31:46 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
X-cip-c: H

IP      : 39.90.13.119
地址    : 中國  山東  聊城
運營商  : 聯通
2.使用ENTRYPOINT指令,實現執行容器可以新增引數
#Dockerfile05
FROM centos:7

RUN yum -y install curl
ENTRYPOINT ["curl","-s","https://www.cip.cc/"]
[root@aaa ~/mydocker]# docker build -f Dockerfile05 -t mycentos:03 .
Sending build context to Docker daemon 6.144 kB
Step 1/3 : FROM centos:7
 ---> b5b4d78bc90c
Step 2/3 : RUN yum -y install curl
 ---> Using cache
 ---> db8ecada6a2d
Step 3/3 : ENTRYPOINT curl -s https://www.cip.cc/
 ---> Running in e7f282a2281d
 ---> f79f5093d0ce
Removing intermediate container e7f282a2281d
Successfully built f79f5093d0ce

追加“-i”引數

[root@aaa ~/mydocker]# docker run -it mycentos:03 -i
HTTP/1.1 200 OK
Server: openresty
Date: Thu, 06 Aug 2020 13:36:40 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
X-cip-c: H

IP      : 39.90.13.119
地址    : 中國  山東  聊城
運營商  : 聯通

結論:CMD指令執行容器新增引數會替換CMD的命令;而ENTRYPOINT指令相當於追加引數