복붙노트

[REDIS] 도커 - 작성 - 0.0.0.0에서 레디 스 대신 127.0.0.1

REDIS

도커 - 작성 - 0.0.0.0에서 레디 스 대신 127.0.0.1

나는 도커-작성에 내 레일 응용 프로그램을 (로컬 dev에 기계) 마이그레이션있다. 모든 레디 스에 연결할 수있는 노동자 레일 예 (배치)를 제외하고 노력하고 있습니다.

Completed 500 Internal Server Error in 40ms (ActiveRecord: 2.3ms)

Redis::CannotConnectError (Error connecting to Redis on 127.0.0.1:6379 (Errno::ECONNREFUSED)):

내 고정 표시기 - compose.yml에서

redis:
  image: redis
  ports:
    - "6379:6379"

batch:
  build: .
  command: bundle exec rake environment resque:work QUEUE=*
  volumes:
    - .:/app
  links:
    - db
    - redis
  environment:
    - REDIS_URL=redis://redis:6379

나는 레디 스 인스턴스가 부두 노동자 호스트의 IP를 통해 볼 수 있습니다 생각합니다.

$ docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                       SWARM   DOCKER    ERRORS
default   *        virtualbox   Running   tcp://192.168.99.100:2376           v1.10.0

0.0.0.0 통해 액세스하는 것은 일을하지 않습니다

$ curl 0.0.0.0:6379 
curl: (7) Failed to connect to 0.0.0.0 port 6379: Connection refused

IP 나는 일을 생각하는 고정 표시기 기계를 통해 액세스 :

$ curl http://192.168.99.100:6379
-ERR wrong number of arguments for 'get' command
-ERR unknown command 'Host:'

편집하다

배치 인스턴스에서 레디 스 - CLI를 설치 한 후, 나는 '레디 스'호스트 이름을 사용하여 레디 스 서버를 공격 할 수 있었다. 나는 레일 자체의 구성에 문제가 가능하다고 생각합니다.

해결법

  1. ==============================

    1.당신이 실행하는 경우

    당신이 실행하는 경우

    docker-compose run --rm batch env | grep REDIS
    

    당신은 당신의 용기 (일부를 자동 생성 작성 의지의 링크 라인)을 가지고있는 ENV 변수를 얻을 것이다. 그런 다음 당신이해야 할 모든 _REDIS_1_PORT의 라인을 따라 하나 모습은 ... 올바른 하나를 사용하십시오. 나는 다른 방법으로 다른 서비스로 내 레일을 연결하는 행운을 가진 적이있다. 그들이 컨테이너 IP는 신생 기업 사이에 변경이 발생하는 경우에도 최신 수 있도록 다행히 이러한 ENV 변수는 항상 처음에 생성됩니다.

  2. ==============================

    2.당신은 레디 스 시작할 때까지 기다려야 할 수도 있지만, 당신은 서비스에 연결하는 호스트 이름 레디 스를 사용해야합니다.

    당신은 레디 스 시작할 때까지 기다려야 할 수도 있지만, 당신은 서비스에 연결하는 호스트 이름 레디 스를 사용해야합니다.

  3. ==============================

    3.마른 세수!

    마른 세수!

    고정 표시기 용기가 잘 소통하고, 문제는 내가 Resque를 찾을 수 (레디 스를 사용하여 응용 프로그램을) 말하지 않았되었다. 나는 고정 표시기-CLI를 사용해야 지적에 대해 "진짜 빌"을 주셔서 감사합니다.

    다른 사람이 도커 및 Resque을 사용하기 위해, 당신은 당신의 설정 / 초기화 / resque.rb 파일이 필요합니다

    Resque.redis = Redis.new(host: 'redis', port: 6379)
    Resque.after_fork = Proc.new { ActiveRecord::Base.establish_connection }
    
  4. from https://stackoverflow.com/questions/35350679/docker-compose-redis-at-0-0-0-0-instead-of-127-0-0-1 by cc-by-sa and MIT license