Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将redis与docker compose一起使用时连接被拒绝_Docker_Redis_Connection - Fatal编程技术网

将redis与docker compose一起使用时连接被拒绝

将redis与docker compose一起使用时连接被拒绝,docker,redis,connection,Docker,Redis,Connection,这是我现在的docker-compose.yml: version: "2.0" services: redis: image: redis container_name: framework-redis ports: - "127.0.0.1:6379:6379" web: image: myContainer:v1 container_name: framework-web depends

这是我现在的docker-compose.yml:

version: "2.0"
services:
    redis:
      image: redis
      container_name: framework-redis
      ports:
        - "127.0.0.1:6379:6379"
    web:
      image: myContainer:v1
      container_name: framework-web
      depends_on:
        - redis
      volumes:
        - /var/www/myApp:/app
      environment:
        LOG_STDOUT: /var/log/docker.access.log
        LOG_STDERR: /var/log/docker.error.log
      ports:
        - "8100:80"
我尝试过不同的设置;例如:不使用redis的端口值,使用0.0.0.0,切换到expose选项

如果我尝试从主机使用127.0.0.1进行连接,它会工作,但会失败,并为我的应用程序容器显示一条连接被拒绝的消息


有什么想法吗?

如果您从
框架web
访问
框架redis
,那么您需要使用ip(或容器名称,即
框架redis
)和
框架redis的端口来访问它。由于它将位于docker桥的后面,因此
172.17.0.0/16
范围内的ip将分配给
framework redis
。您可以使用该IP或更好,只需将容器名称与
6379
端口一起提供即可

 $ cat docker-compose.yml
version: "2.0"
services:
    redis:
      image: redis
      container_name: framework-redis
    web:
      image: redis
      container_name: framework-web
      depends_on:
        - redis
      command: [ "redis-cli", "-h", "framework-redis", "ping" ]
  $
  $ docker-compose up
Recreating framework-redis ... done
Recreating framework-web   ... done
Attaching to framework-redis, framework-web
framework-redis | 1:C 09 Dec 2019 19:25:52.798 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
framework-redis | 1:C 09 Dec 2019 19:25:52.798 # Redis version=5.0.6, bits=64, commit=00000000, modified=0, pid=1, just started
framework-redis | 1:C 09 Dec 2019 19:25:52.798 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
framework-redis | 1:M 09 Dec 2019 19:25:52.799 * Running mode=standalone, port=6379.
framework-redis | 1:M 09 Dec 2019 19:25:52.800 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
framework-redis | 1:M 09 Dec 2019 19:25:52.800 # Server initialized
framework-redis | 1:M 09 Dec 2019 19:25:52.800 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
framework-redis | 1:M 09 Dec 2019 19:25:52.800 * DB loaded from disk: 0.000 seconds
framework-redis | 1:M 09 Dec 2019 19:25:52.800 * Ready to accept connections
framework-web | PONG
framework-web exited with code 0
正如您在上面所看到的,我收到了
PING
命令的
PONG

还有几点:

  • 端口
    主机端口:容器端口
    的形式编写。您不需要提供IP(正如@coulburton在评论中指出的)

  • 如果您仅从
    framework-web
    访问
    framework-redis
    ,则不需要发布端口(即端口部分中的
    6379:6379
    )。当我们想要从其他网络(例如主机或其他物理机器)访问在容器网络(据我所知,默认情况下是
    172.17.0.0/16
    )中运行的应用程序时,我们只需要发布端口


这个
“127.0.0.1:6379:6379”
难道不应该是
“6379:6379”
?您如何从应用程序容器连接到Redis?您应该在Compose文件中使用服务名作为主机名,在您的连接字符串中使用
redis