Docker Redis连接被拒绝

我正在尝试通过代码访问Redis服务器,但未连接。但是,如果我猛击redis容器,我可以访问redis-cli。

docker-compose.yml看起来像这样

version: '2'

services:

web:

build:

context: .

dockerfile: Dockerfile_nginx

ports:

- "9000:80"

environment:

- NGINX_SERVERNAME=xxx.dev *.xxx.dev

command: /bin/bash -c "envsubst '$$NGINX_SERVERNAME' < /var/www/site.template > /etc/nginx/conf.d/default.conf

&& dos2unix /var/www/provision/init_storage.sh && sh /var/www/provision/init_storage.sh

&& nginx -g 'daemon off;'"

volumes:

- .:/var/www

links:

- php

networks:

frontend

php:

build:

context: .

dockerfile: Dockerfile_php-fpm

command: /bin/bash -c "composer install

&& php-fpm"

volumes:

- .:/var/www

environment:

- APP_ENV=local

- APP_DEBUG=true

networks:

- frontend

- backend

links:

- redis

db:

build:

context: .

dockerfile: Dockerfile_mariadb

volumes:

- ./initdb:/docker-entrypoint-initdb.d

ports:

- "3309:3306"

environment:

MYSQL_ROOT_PASSWORD: xxxx

MYSQL_DATABASE: xxxx

networks:

- backend

redis:

build:

context: .

dockerfile: Dockerfile_redis

ports:

- "6379:6379"

networks:

frontend:

driver: bridge

backend:

driver: bridge

Dockerfile_redis

FROM redis:latest

当我尝试使用此代码连接到Redis服务器时

$redis = new \Redis();

try {

$redis->connect('127.0.0.1', 6379);

} catch (\Exception $e) {

var_dump($e->getMessage()) ;

die;

}

它发出此警告

Warning: Redis::connect(): connect() failed: Connection refused

有谁知道如何将Redis容器连接到PHP容器?

回答:

回答:

Docker

Compose为不同的服务创建了单独的docker容器。从逻辑上讲,每个容器就像不同的分离的计算机服务器,它们仅通过docker网络相互连接。

将此图中的每个方框视为一台单独的计算机,那么实际上就是您所拥有的:

+----------------------------------------------------------+

| your machine |

+----------------------------------------------------------+

|

+------ (virtual network by docker) -------+

| | |

+-----------------+ +-------------------+ +----------------+

| "php" container | | "redis" container | | "db" container |

+-----------------+ +-------------------+ +----------------+

您的PHP容器在“ localhost”中看不到任何Redis,因为其中没有Redis。就像在“

localhost”中看不到任何MySQL一样。您的redis在“ redis”容器中运行。您的MySQL在“ db”容器中运行。

使您感到困惑的是端口绑定指令(即ports在此定义中):

redis:

build:

context: .

dockerfile: Dockerfile_redis

ports:

- "6379:6379"

6379“ redis”容器的端口已绑定到您的计算机,但

绑定到您的计算机。其他容器对端口绑定的访问权限不同。因此,即使您的计算机可以将其与“ 127.0.0.1:6379”连接,该php容器也无法执行此操作。

回答:

如Docker

Compose中的网络中所述,每个docker

compose容器都可以通过使用服务名称作为主机名来访问其他容器。例如,按服务运行的编程php可以使用hostname访问MySQL服务db

所以你应该用它的主机名连接redis redis

$redis = new \Redis();

try {

$redis->connect('redis', 6379);

} catch (\Exception $e) {

var_dump($e->getMessage()) ;

die;

}

以上是 Docker Redis连接被拒绝 的全部内容, 来源链接: utcz.com/qa/434609.html

回到顶部