로컬로 세워진 여러 docker-compose의 Rails에서 API를 두드리고 싶습니다.

완성 이미지도





전제



docker-compose에서 별도의 Rails App을 시작하십시오.
여기에서는 docker-compose에서 설정만 씁니다.
※ 네트워크 등의 설정치는 참조처에 있는 기사를 참고로 하고 있습니다
※DB = MySQL

하고 싶은 것



로컬에서 별도의 docker-compose에서 시작한 Rails App간에 API 통신을 하고 싶다.
e.g. 이미지 다이어그램의 Rails App2 API를 Rails App1에서 두드리고 싶습니다.

아무 것도하지 않고 통신을 시도 할 때의 오류



키워드에서 이 메모에 도착할 수 있도록 남겨 둡니다.
Errno::ECONNREFUSED: Connection refused - connect(2)

개요


  • 공통 네트워크 생성
  • 각 docker-compose.yml services에 공통 네트워크 설정
  • 요청이 도착했는지 확인
  • 완성

  • 절차


  • docker network create --driver bridge common_link (공통 네트워크 생성)
  • docker network ls (생성 된 네트워크 확인)
  • Rails App1 및 Rails App2 docker-compose.yml services 계층 구조에 networks: 를 정의
  • docker-compose.yml
    services:
    .
    .
    networks:
      common_link:
        external: true
    
  • Rails App1, DB1, Rails App2, DB2 각각의 컨테이너 설정 위치에서 networks를 정의
  • services:
      rails_app1:
        networks:
          - common_link
      db1:
        networks:
          - common_link
    
  • docker-compose2의 MySQL 포트가 3306으로 덮이지 않도록 docker-compose.yml 수정
  • services:
      db2:
        ports:
          - "127.0.0.1:3307:3307"
    
  • docker-compose2의 Rails App2에서 MySQL을 바인딩하는 설정이 있으면 포트 값을 변경하십시오.
    services:
      rails_app2:
        environment:
          DATABASE_URL: mysql2://root:root@mysql:3307
    
  • docker-compose2의 MySQL config에 포트 지정
    e.g./Dockerfiles/mysql/conf.d/mysql.cnf
  • [client]
    port=3307
    [mysqld]
    port=3307
    
  • docker-compose1과 docker-compose2 모두 시작
  • docker network inspect common_link (Rails App1, DB1, Rails App2, DB2의 총 4 개의 컨테이너가 동일한 네트워크에 속하는지 확인)

  • e.g. Containers

  • 문제가 없다면 ping, curl, API를 치십시오.
  • docker-compose exec rails_app1 bash
  • ping 172.19.0.5 # 위의 임시 이미지에서 확인한 IP (172.19.0.5)를 rails_app2로 설정하면
  • curl 172.19.0.5

  • 완성입니다. 수고하셨습니다.

  • 다른 좋은 설정이 있으면 알려주세요.

    참조처

    좋은 웹페이지 즐겨찾기