最近我看到很多使用 exec "$@" 的 docker 入口点脚本,其中 docker 镜像的实际进程将启动。我也想在我的 docker swarm 集群中将其用于我自己的图像,但它并没有启动实际的过程。相反,它退出容器,因为它找不到任何参数。或者至少,这就是我在“echo”参数:$@“”中看到的。
有人知道如何让它真正发挥作用吗?我是否对 ENTRYPOINT 和 CMD 命令做错了什么?这是我的 Dockerfile 和 Entrypoint.sh 脚本:
FROM openresty/openresty:alpine-fat
WORKDIR /
COPY entrypoint.sh entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/bin/sh"]
CMD ["entrypoint.sh"]
#!/bin/sh
# Start Proxy
exec "$@"
我自己测试过。
需要在代码中进行一些小的更改:
FROM openresty/openresty:alpine-fat
WORKDIR /
COPY entrypoint.sh entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
CMD ["default-command", "default-arg"]
entrypoint.sh 将能够启动你的
ENTRYPOINT
CMD
定义在启动容器时未指定其他参数时传递给脚本的默认参数。
更改后尝试使用
docker run myimage
。
让我知道它是否有效。