Docker 使用命令行参数传递命令

发布时间:2022-05-13浏览次数:0

支持注册ChatGPT Plus的OneKey虚拟卡
绑定Apple Pay、Google Pay、支付宝和微信支付进行日常消费

注册和了解更多 ->

silver
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 这种场景就可以视为函数的参数

字节笔记本扫描二维码查看更多内容