본문 바로가기
TroubleShooting

docker-compose 작성하면서 생긴 이슈 정리

by 창따오 2023. 12. 26.
728x90

이슈1

현재 사용하고 있는 맥북은 M2프로이다. aws 리눅스 서버에 배포 시 문제점

현재 맥환경 arm64 /   But, AWS Linux amd 64

환경 차이 발생 !!!!

 

 

단일 도커 이미지를 빌드하는 경우 해결방법 (택 1)

1번, 환경 변수 설정

export DOCKER_DEFAULT_PLATFORM=linux/amd64

2번, Dockerfile FROM명령에 플래그 포함

FROM --platform=linux/amd64 amazoncorretto:17

 

 

도커 컴포즈로 빌드하는 경우 해결방법

platform: linux/amd64 를 각 서비스에 포함시킨다.

version: "3"

services:  
  frontend:  
    platform: linux/amd64 # <-
    build: frontend  
    ports:
      - 80:80  
    depends_on:
      - backend  
  backend:  
    platform: linux/amd64 # <-
    build: backend

 

이슈2

원인 - db연결 주소 중 호스트 이름을 ‘localhost’로 보기 때문에 생긴 문제

해결 - 컨테이너가 분리되어 있으므로 localhost가 아닌 service명을 기재해주어야 함


docker-compose를 작성하고 build를 하는 도중,

컨테이너까지 잘 생성하고 port 번호도 맞는데 계속해서 DB 연결을 실패했다.

 

port 번호도 바꾸고 이것저것 시도하던 중에 DB 연결 주소 중 ‘localhost’가 문제라는 것을 알게되었다.

app과 db의 환경이 컨테이너로 분리되어 있으므로 이제 'localhost'는 잘못된 호스트인 것이다.

 

service 이름 확인 방법

# docker-compose.yml

version: "3"

services:
	...

  mysql: # <- 요거
    platform: linux/amd64
    image: mysql:8
    ports:
      - 3306:3306
    environment:
      MYSQL_DATABASE: MY_SQL_DB
      MYSQL_ROOT_PASSWORD: root
      MySQL_ROOT_HOST: '%'
  	networks:
      - network

 

수정 예시

# localhost -> mysql(위에서 확인한 서비스 이름)

jdbc:mysql://localhost:3306/electronic_post?useSSL=false&serverTimezone=Asia/Seoul&allowPublicKeyRetrieval=true

>>> 

jdbc:mysql://mysql:3306/electronic_post?useSSL=false&serverTimezone=Asia/Seoul&allowPublicKeyRetrieval=true

 

참고 링크

 

Docker: Is the server running on host "localhost" (::1) and accepting TCP/IP connections on port 5432?

I am getting issues while setup and run the docker instance on my local system with Ruby on Rail. Please see my docker configuration files:- Dockerfile FROM ruby:2.3.1 RUN useradd -ms /bin/bash ...

stackoverflow.com