了解 Dockerfile CMD/ENTRYPOINT
Understanding Dockerfile CMD/ENTRYPOINT
我是 Docker 的新手。尝试使用 Transmission 构建小图像。
这是我的Docker文件:
#base image
FROM alpine:latest
#install Transmission
RUN apk update
RUN apk add transmission-daemon
#expose port
EXPOSE 9091
#start app
CMD ["/usr/bin/transmission-daemon"]
然后我启动容器:
docker run transmission
然后它立即退出。我认为它会保持 运行,因为传输守护程序应该保持 运行。
我也尝试了 ENTRYPOINT,但结果是一样的。然而,下一个版本按预期工作:
ENTRYPOINT ["/usr/bin/transmission-daemon"]
CMD ["-h"]
它运行,显示传输帮助并退出。
关于 Docker 如何在容器内运行应用程序,我缺少什么?
Docker 只要容器启动的进程处于活动状态,容器就会保持 运行ning。如果您的容器在 运行 时启动守护进程,那么守护进程启动脚本就是进程 Docker 监视。完成后,容器退出 - 因为 Docker 没有监视脚本生成的后台进程。
通常您的 CMD
或 ENTRYPOINT
将 运行 交互进程而不是守护进程,并且您让 Docker 负责将容器置于后台docker run -d
。 (CMD
和 ENTRYPOINT
之间的实际差异约为 giving users flexibility to run containers from your image in different ways)。
如果您正在查看 运行 在容器中安装已建立的应用程序,那么值得检查 Docker 中心。 There are a bunch of Transmission images on Docker Hub 您可以直接使用,或查看他们的 Docker 文件以查看图像是如何构建的。
我是 Docker 的新手。尝试使用 Transmission 构建小图像。 这是我的Docker文件:
#base image
FROM alpine:latest
#install Transmission
RUN apk update
RUN apk add transmission-daemon
#expose port
EXPOSE 9091
#start app
CMD ["/usr/bin/transmission-daemon"]
然后我启动容器:
docker run transmission
然后它立即退出。我认为它会保持 运行,因为传输守护程序应该保持 运行。 我也尝试了 ENTRYPOINT,但结果是一样的。然而,下一个版本按预期工作:
ENTRYPOINT ["/usr/bin/transmission-daemon"]
CMD ["-h"]
它运行,显示传输帮助并退出。 关于 Docker 如何在容器内运行应用程序,我缺少什么?
Docker 只要容器启动的进程处于活动状态,容器就会保持 运行ning。如果您的容器在 运行 时启动守护进程,那么守护进程启动脚本就是进程 Docker 监视。完成后,容器退出 - 因为 Docker 没有监视脚本生成的后台进程。
通常您的 CMD
或 ENTRYPOINT
将 运行 交互进程而不是守护进程,并且您让 Docker 负责将容器置于后台docker run -d
。 (CMD
和 ENTRYPOINT
之间的实际差异约为 giving users flexibility to run containers from your image in different ways)。
如果您正在查看 运行 在容器中安装已建立的应用程序,那么值得检查 Docker 中心。 There are a bunch of Transmission images on Docker Hub 您可以直接使用,或查看他们的 Docker 文件以查看图像是如何构建的。