[REDIS] 도커 레디 스의 연결이 거부 됨
REDIS도커 레디 스의 연결이 거부 됨
나는 코드를 통해 레디 스 서버에 액세스하기 위해 노력하고있어 그것을 연결 아니에요. 내가 레디 스 컨테이너에 비난하지만 나는 레디 스-CLI에 액세스 할 수 있습니다.
이 같은 고정 표시기 - 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 = 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
사람이 PHP 컨테이너에 레디 스 컨테이너를 연결하는 방법을 알고 있나요?
해결법
-
==============================
1.도커 작성 다른 서비스를 분리 용기 고정 표시기를 생성한다. 각 컨테이너는 논리적으로 만 서로 고정 표시기를 통해 네트워크에 연결된 다른 분리 된 컴퓨터 서버와 같은, 말하자면된다.
도커 작성 다른 서비스를 분리 용기 고정 표시기를 생성한다. 각 컨테이너는 논리적으로 만 서로 고정 표시기를 통해 네트워크에 연결된 다른 분리 된 컴퓨터 서버와 같은, 말하자면된다.
다음이 당신이 가지고있는 실질적이고, 개별 컴퓨터로이 그림에서 각 상자를 고려 :
+----------------------------------------------------------+ | your machine | +----------------------------------------------------------+ | | | +-----------------+ +-------------------+ +----------------+ | "php" container | | "redis" container | | "db" container | +-----------------+ +-------------------+ +----------------+
거기에 더 레디 스를가 없기 때문에 귀하의 PHP 컨테이너는 "로컬 호스트"에서 어떤 레디 스 표시되지 않습니다. 그냥은 "로컬 호스트"에서 어떤 MySQL을 참조 would't있다. 귀하의 레디 스의 "레디 스"컨테이너에서 실행됩니다. 귀하의 MySQL은 당신의 "DB"컨테이너에서 실행됩니다.
(이 정의에 즉 포트) 지시를 바인딩 포트 혼란 것들 :
redis: build: context: . dockerfile: Dockerfile_redis ports: - "6379:6379"
은 "레디 스"컨테이너의 포트 6379는 컴퓨터에 바인더 제본하지만 컴퓨터에만있다. 다른 컨테이너는 포트 바인딩에 동일한 액세스 할 수 없습니다. 그래서 심지어 컴퓨터가 '127.0.0.1:6379'로 연결할 수 있습니다, PHP는 컨테이너는 동일한 기능을 수행 할 수 없습니다.
도커 작성 네트워킹에서 설명한 바와 같이, 각각의 고정 표시기 작성 컨테이너는 호스트로의 서비스의 이름을 사용하여, 다른 용기에 액세스 할 수있다. 예를 들어, 서비스 PHP하여 프로그램 실행은 호스트 이름 데시벨로 MySQL의 서비스에 액세스 할 수 있습니다.
당신은 호스트 이름 레디 스와 레디 스를 연결해야합니다 그래서
$redis = new \Redis(); try { $redis->connect('redis', 6379); } catch (\Exception $e) { var_dump($e->getMessage()) ; die; }
-
==============================
2.단지 레디 스 포트를 제거하고 Laravel 프로젝트 .env의 파일에 레디 스에 레디 스 호스트 이름을 변경합니다.
단지 레디 스 포트를 제거하고 Laravel 프로젝트 .env의 파일에 레디 스에 레디 스 호스트 이름을 변경합니다.
REDIS_HOST=redis #REDIS_PORT=6379
-
==============================
3.아래 대신 로컬 호스트의 네트워크 사용을위한 정적 IP를 사용하는 경우
아래 대신 로컬 호스트의 네트워크 사용을위한 정적 IP를 사용하는 경우
$redis->connect('<static-ip>', 6379);
-
==============================
4.
lnmp-redis: image: yahuiwong/lnmp:redis3.2.9 hostname: lnmp-redis-v3 ports: - "63789:63789"
$redis = new \Redis(); var_dump($redis); try { $redis->connect('lnmp-redis-v3', 63789); var_dump($redis->keys("*")); } catch (\Exception $e) { var_dump($e->getMessage()) ; }
from https://stackoverflow.com/questions/42360356/docker-redis-connection-refused by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] Node.js를에서 채팅 서버에 대한 레디 스 펍 / 하위 (0) | 2020.01.12 |
---|---|
[REDIS] 실시간 응용 프로그램 초보자 - Node.js를 + 레디 스 또는 RabbitMQ -> 클라이언트 / 서버 방법? (0) | 2020.01.12 |
[REDIS] 레디 스, 세션 만료 및 역방향 조회 (0) | 2020.01.12 |
[REDIS] 어떻게 레디 스 키 조회에 대한 O (1) 시간을 주장 하는가? (0) | 2020.01.12 |
[REDIS] 정지 서버 레디 스. 어느 종료 나 정지 작업 (0) | 2020.01.11 |