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

时间:2015-05-30 14:20:35

标签: redis docker docker-compose

我的redis容器被定义为我的docker_compose.yml

中的标准图像
redis:  
  image: redis
  ports:
    - "6379"

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

感谢任何诡计......

4 个答案:

答案 0 :(得分:32)

是。只需使用卷将JavaFX Application Thread超过默认值:

redis.conf

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

但是,默认情况下,redis映像会绑定到redis: image: redis volumes: - ./redis.conf:/usr/local/etc/redis/redis.conf ports: - "6379" 。要从主机访问它,您需要使用Docker已经使用0.0.0.0docker ps命令找到的主机映射到您的主机的端口,然后您可以在{{1其中32678是映射端口。或者,您可以在docker port

中指定要映射到的特定端口

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

答案 1 :(得分:13)

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

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

答案 2 :(得分:2)

不幸的是,使用Docker时,关于Redis配置文件的事情变得有些棘手,并且答案被认为是最好的(肯定是没有经过实际测试的人),这确实可行。

但这是快速而又毫不费力的工作方式:

parse_date_time

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

请不要忘记设置密码,并尽可能关闭端口6379。

稍后谢谢。

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

如果将您的redis容器称为“ redis”,并且就docker而言,您执行命令 year date_old hidden_date date 1 1992 February 15 <NA> 1992-02-15 2 1993 October 02-24 <NA> 1993-10-02 3 1995 15 The hidden date is 15 July 1995 1995-07-15 4 <NA> <NA> The hidden date is 2005 2005-00-00 (用于验证正在运行的容器的内部ip地址),那么将翻译docker文件中给出的命令内部类似于: command: redis-server --bind redis-container-name --requirepass some-long-password --maxmemory 256mb --maxmemory-policy allkeys-lru --appendonly yes

答案 3 :(得分:0)

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

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