gpt4 book ai didi

node.js - 作为守护进程运行的带有 redis 的 Docker 容器不运行

转载 作者:可可西里 更新时间:2023-11-01 11:24:37 26 4
gpt4 key购买 nike

我有简单的 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

在我的入口点,我正在设置一些配置键并通过 Node 将一些数据设置到 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 作为守护进程运行?

最佳答案

作者的回答

TL:DR

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

问题在于 Docker ENTRYPOINTCMD 应该“生成单个进程”。而我把Redis的启动和node的init.js执行作为不同的程序放到了supervisord中。提供 supervisord.conf 例如:

[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

我为什么要那样做?

我在这个问题上遇到的主要问题是误解了 Docker 容器实际上是什么。以及 Docker 中的 ENTRYPOINTCMD 是什么意思。我认为我应该“在 Docker 中运行一些服务器并公开一些端口,Docker 将自行完成所有事情”,但这不是容器的工作方式。容器和 VM 之间存在差异。看这个:How is Docker different from a virtual machine?

当将 Docker 容器视为对单个进程的包装时,很明显我的 Dockerfile 中编写的代码不会以我预期的方式工作。

如果需要在 Docker 容器中运行多个进程,那么您应该使用类似 supervisordconcurrently 的东西(如果您更喜欢 Node生态系统)。

关于node.js - 作为守护进程运行的带有 redis 的 Docker 容器不运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50461782/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com