在 debian/ubuntu 启动时启动 redis-server
start redis-server on debian/ubuntu boot
我正在尝试创建一个 docker 容器,redis 在其中启动。
在将连接到 redis 数据库的另一个容器上将有其他前台服务 运行ning。
由于某种原因,当我 运行 容器时服务没有启动。
这是我简化的 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"]
任何人都可以向我解释为什么这不起作用以及应该如何正确地做到这一点?
所以 docker 容器 类似于 完整的 OS 但有一些关键差异。它不会 运行 一个完整的初始化系统。它旨在 运行 一个单一的进程树。虽然您可以 运行 一个容器中的主管,例如 运行it 等人,但您实际上是在违背 docker 的原则,所有的工具和文档都会让您远离使用像 VM 这样的容器并实现每个容器 1 process/service 的和谐。
所以 redis 没有启动,因为 ping
命令实际上是容器中唯一的进程 运行ning。
there will be other foreground services running on that other container which will connect to the redis db.
不要这样做。真的。当你在每个容器中放置 1 个进程并通过网络链接连接它们时,一切都会变得更容易。
在这里挖掘一个老问题,但我在尝试将 真正 简单的 Redis 作业队列打包到现有的 docker 图像设置中时遇到了这个问题。我需要它在映像启动时启动,以便应用程序可以访问它。在这种情况下内存和性能不是问题,或者外部 Redis 服务器绝对是正确的选择。
这是我在 Dockerfile
中为一个简单的 NodeJs 应用程序所做的,使其无需编辑任何系统文件即可运行 post-install:
RUN apt-get update && apt-get -y redis-server
CMD service redis-server start & node dist/src/main
使用并行命令进程有点粗糙,但正如公认的答案所指出的那样,这 不是 真正的操作系统,所以我们真的只关心 Redis 在应用程序运行时在线.
我正在尝试创建一个 docker 容器,redis 在其中启动。 在将连接到 redis 数据库的另一个容器上将有其他前台服务 运行ning。
由于某种原因,当我 运行 容器时服务没有启动。 这是我简化的 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"]
任何人都可以向我解释为什么这不起作用以及应该如何正确地做到这一点?
所以 docker 容器 类似于 完整的 OS 但有一些关键差异。它不会 运行 一个完整的初始化系统。它旨在 运行 一个单一的进程树。虽然您可以 运行 一个容器中的主管,例如 运行it 等人,但您实际上是在违背 docker 的原则,所有的工具和文档都会让您远离使用像 VM 这样的容器并实现每个容器 1 process/service 的和谐。
所以 redis 没有启动,因为 ping
命令实际上是容器中唯一的进程 运行ning。
there will be other foreground services running on that other container which will connect to the redis db.
不要这样做。真的。当你在每个容器中放置 1 个进程并通过网络链接连接它们时,一切都会变得更容易。
在这里挖掘一个老问题,但我在尝试将 真正 简单的 Redis 作业队列打包到现有的 docker 图像设置中时遇到了这个问题。我需要它在映像启动时启动,以便应用程序可以访问它。在这种情况下内存和性能不是问题,或者外部 Redis 服务器绝对是正确的选择。
这是我在 Dockerfile
中为一个简单的 NodeJs 应用程序所做的,使其无需编辑任何系统文件即可运行 post-install:
RUN apt-get update && apt-get -y redis-server
CMD service redis-server start & node dist/src/main
使用并行命令进程有点粗糙,但正如公认的答案所指出的那样,这 不是 真正的操作系统,所以我们真的只关心 Redis 在应用程序运行时在线.