docker run --rm -it centos ping "host.docker.internal"
docker run -it --entrypoint /bin/bash [docker_image]
当存在 ENTRYPOINT
后,CMD
的内容将会作为参数传给 ENTRYPOINT
测试
FROM ubuntu:18.04
RUN apt-get update \
&& apt-get install -y curl \
&& rm -rf /var/lib/apt/lists/*
CMD [ "curl", "-s", "http://myip.ipip.net" ]
构建镜像
docker build -t myip .
外部传递的cmd 会替代容器内的cmd
$ docker run myip -i
docker: Error response from daemon: invalid header field value "oci runtime error: container_linux.go:247: starting container process caused \"exec: \\\"-i\\\": executable file not found in $PATH\"\n".
实际执行的是
docker run myip -i
使用ENTRYPOINT
后 cmd会作用参数传递
FROM ubuntu:18.04
RUN apt-get update \
&& apt-get install -y curl \
&& rm -rf /var/lib/apt/lists/*
ENTRYPOINT [ "curl", "-s", "http://myip.ipip.net" ]
docker run myip -i
redis官方 demo
FROM alpine:3.4
...
RUN addgroup -S redis && adduser -S -G redis redis
...
ENTRYPOINT ["docker-entrypoint.sh"]
EXPOSE 6379
CMD [ "redis-server" ]
该脚本的内容就是根据 CMD
的内容来判断,如果是 redis-server
的话,则切换到 redis
用户身份启动服务器,否则依旧使用 root
身份执行。
docker run -it redis id
uid=0(root) gid=0(root) groups=0(root)
如果把ENTRYPOINT
看成是函数,cmd 这种场景就可以视为函数的参数