Redis in docker-compose:有什么方法可以指定redis.conf文件吗?

icnyk63a  于 2022-09-19  发布在  Redis
关注(0)|答案(6)|浏览(172)

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

redis:  
  image: redis
  ports:
    - "6379"

我猜它使用的是标准设置,比如绑定到本地主机上的Redis。我需要将它绑定到0.0.0.0,有没有办法添加一个本地redis.conf文件来更改绑定并让docker-compose使用它?

谢谢你的小把戏。

5w9g7ksd

5w9g7ksd1#

是。只需使用卷将您的redis.conf挂载到默认设置之上:

redis:  
  image: redis
  volumes:
    - ./redis.conf:/usr/local/etc/redis/redis.conf
  ports:
    - "6379"

或者,基于复制了conf文件的redis图像创建一个新图像。完整说明请访问:https://registry.hub.docker.com/_/redis/

但是,默认情况下,redis图像确实绑定到0.0.0.0。要从主机访问它,您需要使用DockerMap到您通过使用docker psdocker port命令找到的主机的端口,然后您可以通过localhost:32678访问它,其中32678是Map的端口。或者,您可以在docker-compose.yml中指定要Map到的特定端口。

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

watbbzwu

watbbzwu2#

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

command: redis-server /usr/local/etc/redis/redis.conf
volumes:
 - ./redis/redis.conf:/usr/local/etc/redis/redis.conf
kg7wmglp

kg7wmglp3#

不幸的是,当涉及到Redis配置文件时,事情变得有点棘手,答案是最好的(我相信没有真正测试过它的人)它不能工作。

但是,什么是有效的,快速的,没有外壳的是:

command: redis-server --bind redis-container-name --requirepass some-long-password --maxmemory 256mb --maxmemory-policy allkeys-lru --appendonly yes

您可以在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的内容

guicsvcw

guicsvcw4#

基于David awnser,但更“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

这样,您就可以通过docker-compose.yml文件包含.conf文件,而不需要自定义图像。

kg7wmglp

kg7wmglp5#

这是一个老问题,但我有一个看起来很优雅的解决方案,而且我不必每次都执行命令;)。

1如下所示创建您的dockerfile


# /bin/redis/Dockerfile

FROM redis
CMD ["redis-server", "--include /usr/local/etc/redis/redis.conf"]

我们正在做的是告诉服务器将该文件包括在Redis配置中。您在那里输入的设置将覆盖Redis的默认设置。

2创建您的Docker-Compose

redisall:
      build:
        context: ./bin/redis
      container_name: 'redisAll'
      restart: unless-stopped
      ports:
        - "6379:6379"
      volumes:
        - ./config/redis:/usr/local/etc/redis

3创建您的配置文件,其名称必须与Dockerfile相同

//config/redis/redis.conf
requirepass some-long-password
appendonly yes

################################## NETWORK #####################################

# By default, if no "bind" configuration directive is specified, Redis listens

# for connections from all the network interfaces available on the server.

# It is possible to listen to just one or multiple selected interfaces using

# the "bind" configuration directive, followed by one or more IP addresses.

# 

# Examples:

# 

# bind 192.168.1.100 10.0.0.1

# bind 127.0.0.1 ::1

# 

# ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the

# internet, binding to all the interfaces is dangerous and will expose the

# instance to everybody on the internet. So by default we uncomment the

# following bind directive, that will force Redis to listen only into

# the IPv4 loopback interface address (this means Redis will be able to

# accept connections only from clients running into the same computer it

# is running).

# 

# IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES

# JUST COMMENT THE FOLLOWING LINE.*

# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

bind 127.0.0.1

 // and all configurations that can be specified
 // what you put here overwrites the default settings that have the
 container
0yg35tkg

0yg35tkg6#

1.挂载配置/usr/local/etc/redis/redis.conf
1.添加命令以使用您的配置执行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

相关问题