1

我是 Docker 新手。尝试使用传输构建小图像。这是我的Dockerfile

#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 如何在容器内运行应用程序,我缺少什么?

4

1 回答 1

2

只要容器启动的进程处于活动状态,Docker 就会保持容器运行。如果你的容器在运行时启动了一个守护进程,那么守护进程启动脚本就是 Docker 监视的进程。完成后,容器退出——因为 Docker 没有观察脚本生成的后台进程。

通常,您CMDENTRYPOINT将运行交互式进程而不是守护程序版本,并且您让 Docker 负责将容器置于后台,使用docker run -d. CMD(和之间的实际区别在于ENTRYPOINT用户灵活地以不同方式从您的映像运行容器)。

如果您正在考虑在容器中运行已建立的应用程序,则值得检查 Docker Hub。Docker Hub 上有一堆传输镜像,您可以直接使用它们,或者查看他们的 Dockerfile 以了解镜像是如何构建的。

于 2016-09-20T12:21:50.327 回答