带有redis的Docker容器作为守护进程运行并不运行

时间:2018-05-22 07:11:09

标签: node.js docker redis

我有简单的Dockerfile

FROM base

RUN <code which installs redis>
RUN npm install redis-adapter

EXPOSE 6379

ENTRYPOINT redis-server --daemonize yes && /app/tasks/redis/entrypoint.sh

在我的入口点中,我设置了一些配置键,并通过节点将一些数据设置为redis:

#!/bin/sh

redis-cli hset app:cfg env dev
redis-cli hset app:cfg maxconnections 1024

node /app/tasks/redis/init.js

图像构建成功,但是当我运行它时 - 没有任何反应。问题是什么?我应该怎么做才能在容器中运行redis并在之后进行一些配置?可能是麻烦在于我将redis作为守护进程运行?

1 个答案:

答案 0 :(得分:0)

作者的答案

TL:DR

Stackoverflow中有一个非常相似的问题,可帮助解决我的问题:

问题在于Docker bar_iENTRYPOINT应该“产生单个进程”。我将Redis启动和节点CMD的执行作为不同的程序放入init.js中。提供supervisord例如:

supervisord.conf

我为什么要这么做?

这个问题的主要麻烦在于误解了什么实际上是Docker容器。以及[supervisord] nodaemon=true loglevel=debug [program:redis] priority=1 command=redis-server [program:configurations] priority=2 command=/bin/sh -c /app/tasks/redis/entrypoint.sh ENTRYPOINT在Docker中是什么。我以为我应该“将某些服务器运行到Docker中并暴露一些端口,而Docker将自己完成所有工作”。,但这不是容器的工作方式。容器和虚拟机之间是有区别的。看一下:How is Docker different from a virtual machine?

将Docker容器视为单个过程的包装时,似乎很清楚,用我的CMD编写的代码无法按预期的方式工作。

如果需要在Docker容器中运行多个进程,则应使用Dockerfilesupervisord之类的东西(如果您更喜欢concurrently生态系统)。

相关问题