//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
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
6条答案
按热度按时间5w9g7ksd1#
是。只需使用卷将您的
redis.conf
挂载到默认设置之上:或者,基于复制了conf文件的redis图像创建一个新图像。完整说明请访问:https://registry.hub.docker.com/_/redis/
但是,默认情况下,redis图像确实绑定到
0.0.0.0
。要从主机访问它,您需要使用DockerMap到您通过使用docker ps
或docker port
命令找到的主机的端口,然后您可以通过localhost:32678
访问它,其中32678是Map的端口。或者,您可以在docker-compose.yml
中指定要Map到的特定端口。由于您似乎是Docker的新手,如果您从使用原始的Docker命令开始,而不是从Compose开始,这可能会更有意义。
watbbzwu2#
老问题,但如果有人仍然想这样做,使用卷和命令是可能的:
kg7wmglp3#
不幸的是,当涉及到Redis配置文件时,事情变得有点棘手,答案是最好的(我相信没有真正测试过它的人)它不能工作。
但是,什么是有效的,快速的,没有外壳的是:
您可以在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
的内容guicsvcw4#
基于David awnser,但更“Docker Compose”的方式是:
这样,您就可以通过docker-compose.yml文件包含.conf文件,而不需要自定义图像。
kg7wmglp5#
这是一个老问题,但我有一个看起来很优雅的解决方案,而且我不必每次都执行命令;)。
1如下所示创建您的dockerfile
我们正在做的是告诉服务器将该文件包括在Redis配置中。您在那里输入的设置将覆盖Redis的默认设置。
2创建您的Docker-Compose
3创建您的配置文件,其名称必须与Dockerfile相同
0yg35tkg6#
1.挂载配置
/usr/local/etc/redis/redis.conf
1.添加命令以使用您的配置执行
redis-server