Docker入口点和cmd在一起

我尝试使用入口点和cmd来设置Docker。

FROM debian:stretch RUN apt-get update && \ apt install gnupg ca-certificates -y RUN echo "deb http://repo.aptly.info/ squeeze main" > /etc/apt/sources.list.d/aptly.list RUN apt-key adv --keyserver keys.gnupg.net --recv-keys 9E3E53F19C7DE460 RUN apt update && apt install aptly -y ADD aptly.conf /etc/aptly.conf ADD start.sh . VOLUME ["/aptly"] ENTRYPOINT ["/start.sh"] CMD ["aptly", "api", "serve"] 

但入口点脚本不停止… cmd命令没有启动

在这里我的脚本:

 #!/bin/bash set -e init_aptly() { #import pgp key #create nginx root folder in /aptly su -c "mkdir -p /aptly/.aptly/public" echo "12" #initialize repository #aptly create repo doze-server - distribution="stable" } #check for first run if [ ! -e /aptly/.aptly/public ]; then init_aptly echo "13" fi echo "14" 

脚本总是回显14,我只想要一个,然后从dockerfile执行cmd命令

在使用入口点和命令时,命令段将作为参数附加到入口点可执行文件。 因此在你的情况下:

 ENTRYPOINT ["/start.sh"] CMD ["aptly", "api", "serve"] 

相当于运行:

 ENTRYPOINT["/start.sh", "aptly", "api", "serve"] 

如果不知道入口点是什么,就不能分辨出来,但实际上,这就是将入口点和cmd结合在一起的情况:

 /start.sh aptly api serve 

如果你是简单地启动你的服务器之后,你可以简单地做这样的事情( aptly可执行文件的path可能是必要的):

 ENTRYPOINT ["aptly"] CMD ["api", "serve"] 

除非您只是运行可执行文件,否则不需要入口点脚本。