Docker-compose,无论如何要指定redis.conf文件?

20 redis docker docker-compose

我的redis容器被定义为我的docker_compose.yml中的标准图像

redis:  
  image: redis
  ports:
    - "6379"
Run Code Online (Sandbox Code Playgroud)

我想它正在使用标准设置,比如在localhost上绑定到Redis我需要将它绑定到0.0.0.0,无论如何都要添加本地redis.conf文件来更改绑定并让docker-compose知道吗?

谢谢你的任何招数......

Adr*_*uat 33

是.只需redis.conf使用卷安装超过默认值:

redis:  
  image: redis
  volumes:
    - ./redis.conf:/usr/local/etc/redis/redis.conf
  ports:
    - "6379"
Run Code Online (Sandbox Code Playgroud)

或者,在复制conf文件的情况下,根据redis映像创建一个新映像.完整说明位于:https://registry.hub.docker.com/_/redis/

但是,redis映像0.0.0.0默认绑定到.要从主机访问它,您需要使用Docker已经为您找到的主机映射到的端口docker psdocker port命令,然后您可以localhost:32678在32678是映射端口的位置访问它.或者,您可以指定要映射到的特定端口docker-compose.yml.

由于您似乎是Docker的新手,如果您从使用原始Docker命令开始而不是从Compose开始,这可能会更有意义.

  • 我试着听从你的建议。但是Redis不会读取我的配置文件,似乎只是加载了自己的默认配置;例如,我在 conf 文件中需要密码,但是当实例运行时,没有密码要求。 (6认同)
  • 值得注意的是,在这种情况下,您仍会在控制台中看到使用默认配置文件的警告.这让我感动,我花了一些时间才意识到我实际上正在使用我的自定义配置文件. (2认同)
  • @Kousha - 请参阅 Marcola 的回答。您还需要设置该命令,否则启动时将无法加载/usr/local/etc/redis/redis.conf。 (2认同)

Ske*_*tic 17

不幸的是,对于 Docker,当涉及到 Redis 配置文件时,事情变得有点棘手,并且答案被评为最佳(我确信没有实际测试过它的人)它不起作用。

但是什么有效,快速且没有麻烦的是:

 command: redis-server --bind redis-container-name --requirepass some-long-password --maxmemory 256mb --maxmemory-policy allkeys-lru --appendonly yes
Run Code Online (Sandbox Code Playgroud)

您可以在 yaml docker 文件的命令部分传递您想要的所有变量选项,方法是在其前面添加“--”,然后是变量值。

永远不要忘记设置密码,如果可能,关闭端口 6379。

?谢谢我。

PS:如果您在命令中注意到,我没有使用典型的 127.0.0.1,而是使用 redis 容器名称。这样做的原因是 docker 通过其嵌入式 dns 服务器在内部分配 IP 地址。换句话说,这个绑定地址是动态的,因此增加了额外的安全层。

如果您的 redis 容器被称为“redis”并且您执行命令docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis(用于验证正在运行的容器的内部 ip 地址),就 docker 而言,docker 文件中给出的命令将在内部转换为类似的内容:redis-server --bind 172.19.0.5 --requirepass some-long-password --maxmemory 256mb --maxmemory-policy allkeys-lru --appendonly yes

  • 这是正确的答案。我花了大半天的时间摆弄各种配置,最后,在 cmd 中传递选项是唯一可靠且一致工作的方法,并且不需要大量额外的配置。唯一的事情是我会选择现在感谢你而不是稍后:-D 谢谢! (2认同)

小智 15

老问题,但如果有人仍想这样做,可以使用卷和命令:

command: redis-server /usr/local/etc/redis/redis.conf
volumes:
 - ./redis/redis.conf:/usr/local/etc/redis/redis.conf
Run Code Online (Sandbox Code Playgroud)

  • 在`Volumes`中指定绝对路径映射更安全,像这样:`volumes: - ${PWD}/redis/redis.conf:/usr/local/etc/redis/redis.conf` (2认同)

小智 7

基于 David anwser 但更“Docker Compose”的方式是:

redis:
  image: redis:alpine
    command: redis-server --include /usr/local/etc/redis/redis.conf
    volumes:
      - ./redis/redis.conf:/usr/local/etc/redis/redis.conf
Run Code Online (Sandbox Code Playgroud)

这样,您就可以使用该docker-compose.yml文件包含 .conf 文件,并且不需要自定义图像。


小智 5

  1. 安装你的配置/usr/local/etc/redis/redis.conf
  2. redis-server添加要使用您的配置执行的命令
  redis:
    image: redis:7.0.4-alpine
    restart: unless-stopped
    volumes:
      - ./redis.conf:/usr/local/etc/redis/redis.conf
    command: redis-server /usr/local/etc/redis/redis.conf
    ########################################
    # or using command if mount not work
    ########################################
    command: >
      redis-server --bind 127.0.0.1
      --appendonly no
      --save ""
      --protected-mode yes
Run Code Online (Sandbox Code Playgroud)