Skip to content

[FIX]도커 이미지 DB연결 오류 해결 #1

Description

@sween2591

조나한은 잘 됐다고 하셨었으니 윈도우에만 해당되는 오류일 수 있습니다. 모두 해결하고 생각해보니
아무래도 start.sh에서 docker-compose로 이미지들을 묶는 과정에서 이미지별로 compose파일을 올리다보니
에러가 발생한 것 같기도하네용.. 이미지 명도 도메인으로 사용 해도 된다고 알고있긴한데
작업하다보니 헷갈려서 cmi prefix달려있는 컨테이너 명으로 작업했습니다.

MySQL : Host '컨테이너 private 주소' is not allowed to connect to this MySQL Server
image
원인:

  • 도커 컨테이너는 private ip가 무작위로 배정됩니다.
  • DB컨테이너가 api서버 컨테이너와 같은 네트워크에서 동작하는 게 아니었습니다.
  • 컴포즈 파일 하나에 모든 컨테이너가 있는 게 아니라 여러개의 컴포즈를 로드하기 때문에 default네트워크가 생성되지 않았습니다.
    참고자료
    image

중간 사고과정:

  • 테이블에 접근권한이 없어서 그런 것인가? ->init 쿼리 파일에
    GRANT ALL PRIVILEGES ON *.* TO root@'ip주소' IDENTIFIED BY '비밀번호'' WITH GRANT OPTION;을 추가한다.
    api에서만 접근하므로 컨테이너만 한정할 수 있는 방법이 없을까?
    -> 도커 연습 레포 에서 links로 비슷한 오류를 해결했으나 개념이 잘 기억나지 않아 블로그 추가 자료에서 정보를 얻은 후 위 grant절 ip주소에 적용.
    -> root 계정 생성 시 와일드 카드로 모든 접근을 허용하고 root로 접속하는데 테이블 권한 문제일리가 없었다
    -> 해당 상태에서 grant절을 제거해도 정상 접속확인됨.
    -> 확인해보니 도커 연습 레포와 달리 쉘스크립트에서 이미지를 따로 따로 묶는 형태여서 그런지 run시 default네트워크가 생성되지 않았음.
    -> 같은 네트워크가 아니어서 인/아웃바운드 설정이 필요했던 것으로 원인이 판명됨
    -> 인/아웃바운드를 수동으로 설정하는 것보다 그냥 links 추가로 같은 네트워크로 묶는 게 효율적 + links 사용 시 설정된 컨테이너에서만 링크된 컨테이너 이름을 도메인처럼 사용가능하므로 network로 설정했을 때보다 접속 범위를 좁혀 보안적인 측면에서 이점이 있을 것 같음.

image
image
image
image

단점은 기타 설정 시 컨테이너에만 접근 설정을 하게되면 보안측면에선 좋지만 외부에서 HeidiSQL같은 프론트 소프트웨어로 접속하기가 힘들다.

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions