我正在尝试创建一个docker容器,redis在启动时启动。 将在其他容器上运行其他前台服务,该容器将连接到redis db。
由于某种原因,当我运行容器时服务没有启动。 这里是我简化的Dockerfile
FROM debian
# this solves an issue described here:
# http://askubuntu.com/questions/365911/why-the-services-do-not-start-at-installation
RUN sed -i -e s/101/0/g /usr/sbin/policy-rc.d
# install redis-server
RUN apt-get update && apt-get install -y redis-server
# updates init script (redundant)
RUN update-rc.d redis-server defaults
# ping google to keep the container running in foreground
CMD ["ping", "google.com"]
任何人都可以解释为什么这不起作用以及如何做到这一点?
答案 0 :(得分:2)
所以docker容器就像一个完整的操作系统,但有一些关键的区别。它不会运行完整的初始化系统。它的设计和目的是运行单个进程树。虽然你可以在一个容器中运行一个诸如runit et al之类的主管,但你真的正在对付码头的粒度,所有的工具和文档都将导致你不再使用像VM这样的容器,而是使用1个进程/服务的协调每个容器。
所以redis没有启动,因为ping
命令实际上是容器中运行的唯一进程。
不要这样做。真。当您在每个容器中放入1个进程并通过网络链接连接它们时,一切都会变得更容易。将在另一个容器上运行其他前台服务,该容器将连接到redis db。