我的redis容器被定义为我的docker_compose.yml
中的标准图像redis:
image: redis
ports:
- "6379"
我猜它正在使用标准设置,例如在localhost上绑定到Redis 我需要将它绑定到0.0.0.0,无论如何都要添加一个本地redis.conf文件来更改绑定并让docker-compose知道它吗?
感谢任何诡计......
答案 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.0
或docker 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