【问题标题】:Redis-server command works inside container but not when docker-compose startsRedis-server 命令在容器内有效,但在 docker-compose 启动时无效
【发布时间】:2022-01-19 19:03:47
【问题描述】:

当我偶然发现我的构建存在一个非常奇怪的问题时,我一直在从事一个对 redis 部署进行 dockerize 化和自动化的项目。这是我当前的 Dockerfile

ARG BUILD_VERSION=5
FROM redis:${BUILD_VERSION}

RUN mkdir /var/log/redis
RUN chown -R redis:redis /data /var/log/redis

EXPOSE 6379

WORKDIR /usr/local/etc/redis
CMD ["/usr/local/bin/redis-server", "/etc/redis.conf"]

这是我的作文:

version: '2.2'
services:
  redis:
    image: test:red5
    restart: unless-stopped
    ports:
     - "6379:6379"

    user: $UID:$GID

    volumes:
     - /var/lib/redis/:/var/lib/redis/
     - /var/log/redis/:/var/log/redis/
     - /etc/redis.conf:/etc/redis.conf

需要明确的是,我将 redis 目录和配置安装为卷,因为这是服务器上的内容。UID 和 GID 变量在我的 .env 文件中被调用。

当我在容器内执行 docker exec 并运行 "/usr/local/bin/redis-server", "/etc/redis.conf" 时,redis 服务器初始化没有问题。但是当我运行 doocker-compose up 时,我得到了这个退出代码。

docker-compose up
Creating network "redis_default" with the default driver
Creating redis_redis_1 ... done
Attaching to redis_redis_1
redis_redis_1 exited with code 0

关于堆栈溢出的第一个问题 :).. 非常感谢您的帮助

日志(绑定地址问题已经解决):

I have no name!@b306768fd72f:/usr/local/src$ tail -f /var/log/redis/redis.log
37:C 19 Jan 2022 18:41:09.928 # Configuration loaded
38:M 19 Jan 2022 18:41:09.931 # Could not create server TCP listening socket *:6379: bind: Address already in use
41:C 19 Jan 2022 18:41:40.389 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
41:C 19 Jan 2022 18:41:40.389 # Redis version=5.0.14, bits=64, commit=00000000, modified=0, pid=41, just started
41:C 19 Jan 2022 18:41:40.389 # Configuration loaded
42:M 19 Jan 2022 18:41:40.393 * Running mode=standalone, port=6379.
42:M 19 Jan 2022 18:41:40.393 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
42:M 19 Jan 2022 18:41:40.393 # Server initialized
42:M 19 Jan 2022 18:41:40.394 * DB loaded from disk: 0.001 seconds
42:M 19 Jan 2022 18:41:40.394 * Ready to accept connections

【问题讨论】:

  • 欢迎来到 StackOverflow。您能在日志中看到完整的异常吗?并发布在您的问题中。
  • 自定义映像似乎没有多大作用,尤其是因为您在创建的目录上安装了一个卷;如果你使用未经修改的image: 'redis:5',你有同样的问题吗?
  • 是的,图像并没有做太多这些只是我添加的额外配置。test:redis5 只是一个标签,但底层图像是redis:5

标签: linux docker redis


【解决方案1】:

/etc/redis.conf..中发现问题。

daemonize yes

这阻止了 docker 正确运行 redis-server,因为它试图创建一个 pidfile.. 容器现在正在运行

【讨论】:

  • 不应该把进程放在前台吗?恶魔化通常将进程置于后台,这会导致容器立即退出。当我看到您的回答时,我正要评论这可能是您的问题。
  • 所以我注释掉了这个并且我注释掉了 pidfile.. 以避免 redis 运行。
  • 是的,这是有道理的。因为就像说它把进程放在背景中,所以对于 docker,没有进程可以保留,这就是容器生命周期的结束。也许在你的回答中描述得更好。
  • 非常感谢您的帮助.. 我会尝试发布更好的问题.. 老实说,我认为这与 redis.conf 有任何关系
  • 我的意思是 q 很好,但您的回答可能至少包括您删除或删除了该行。对我来说,不清楚您是否在查看答案时添加或删除了这一行。
猜你喜欢
  • 2021-11-29
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 2016-09-01
  • 2021-01-01
相关资源
最近更新 更多