>

다음과 같은도 커가 있습니다 :

version: '3.5'
services:
  RedisServerA:
    container_name: RedisServerA
    image: redis:3.2.11
    command: "redis-server --port 26379"
    volumes:
      - ../docker/redis/RedisServerA:/data
    ports:
      - 26379:26379
    expose:
      - 26379
  RedisServerB:
    container_name: RedisServerB
    image: redis:3.2.11
    command: "redis-server --port 6379"
    volumes:
      - ../docker/redis/RedisServerB:/data
    ports:
      - 6379:6379
    expose:
      - 6379

이제 vagrant ssh 를 해요  하고

ping RedisServerA
ping RedisServerB

둘 다 작동합니다.

이제 redis 서버에 연결을 시도합니다 :

redis-cli -h RedisServerB

잘 작동합니다

그런 다음 다른쪽에 연결을 시도합니다

redis-cli -h RedisServerA -p 26739

말한다 :

Could not connect to Redis at RedisServerA:26739: Connection refused
Could not connect to Redis at RedisServerA:26739: Connection refused

두 번

여기서 무엇을 놓치고 있습니까?

  • 답변 # 1

    일반적으로이 설정에서는 각 컨테이너가 "자연"포트에서 실행되도록합니다. Docker 외부에서 연결하려면 ports: 가 필요합니다.  매핑하고 호스트의 IP 주소에 게시 된 포트를 통해 컨테이너에 액세스합니다. Docker 컨테이너 간 연결의 경우 (동일한 네트워크에 있다고 가정하고 bare docker run 를 사용한 경우) , 네트워크를 수동으로 생성 한 경우) 컨테이너 이름과 컨테이너의 내부 포트 번호를 사용합니다.

    우리는 docker-compose.yml 를 정리할 수 있습니다  불필요한 줄을 제거하여 파일 ( container_name:  그리고 expose:  실제로 실질적인 효과는 없습니다)) 이미지가 기본 command: 를 실행하게하십시오.  기본 포트에서 ports: 로만 다시 매핑 . 우리는 얻을 것이다 :

    version: '3.5'
    services:
      RedisServerA:
        image: redis:3.2.11
        volumes:
          - ../docker/redis/RedisServerA:/data
        ports:
          - 26379:6379
      RedisServerB:
        image: redis:3.2.11
        volumes:
          - ../docker/redis/RedisServerB:/data
        ports:
          - 6379:6379
    
    

    컨테이너 사이에 기본 포트를 사용합니다

    redis-cli -h RedisServerA
    redis-cli -h RedisServerB
    
    

    Docker 외부에서 서버의 호스트 이름과 게시 된 포트를 사용합니다

    redis-cli -h server.example.com -p 23679
    redis-cli -h server.example.com
    
    

관련 자료

  • 이전 java - ProGuard가 여전히 Facebook 코드를 제거합니까? (또는 ProGuard를 비활성화하십시오!)
  • 다음 asp.net - IIS의 REST