如何使用 docker(特别是 docker swarm)正确使用 commando exec "$@" 来执行 /bin/sh

问题描述 投票:0回答:1

最近我看到很多使用 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 "$@"
bash docker docker-swarm
1个回答
0
投票

我自己测试过。

需要在代码中进行一些小的更改:

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

让我知道它是否有效。

© www.soinside.com 2019 - 2024. All rights reserved.