- 에러상황
- 구현하고자 했던 것
- 성공적으로 완료하면
- 디버깅 방법 1.
- 문제 1. env파일에 작성한 환경변수 잘 불러와지는가?
- 문제 2. docker-compose up했을 때 build가 되지 않음
- 문제 3. 각각의 옵션을 잘 알지 못하며 무엇을 빼놓았는지 알지 못함
- 에러상황 해결
- 아직 해결 하지 못한 에러
에러상황 : docker-compose 파일을 활용해 build를 하면
container를 생성하지 못함
구현하고자 했던 것
node와 mysql의 연동을 위해 docker-compose파일을 활용하여 build에 성공 하기
성공적으로 완료하면
docker-compose up
container가 잘 생성되고, run을 했을 때 5001포트가 잘 실행될 것임
문제 1. env파일에 작성한 환경변수 잘 불러와지는가?
- 쉘 환경변수
- 환경변수 파일
- Dockerfile에 환경변수 직접 삽입
방법이 위와 같으므로 .env파일 활용 가능
https://seongjin.me/environment-variables-in-docker-compose/
Docker Compose에서 각 서비스 컨테이너에 쓰이는 환경변수를 다루는 방법
도커 컴포즈(Docker Compose)를 사용할 때 각 서비스 컨테이너에 필요한 환경변수들을 어떻게 하면 효율적으로 다룰 수 있을까? 이번 글에서는 도커 컴포즈(Docker Compose)에서 환경변수를 다루는 방법
seongjin.me
문제 2. docker-compose up했을 때 build가 되지 않음
docker-compose up 명령어는
컨테이너 생성/시작 옵션이므로
만일 정상적으로 이루어 지려면 building이 된다고 떠야 할 것임
그러나 build가 되고 있지 않았음
build가 되지 않는 이유 :
build옵션을 주지 않았음 : build옵션 설정 완료
그래도 build가 이루어지지 않았음 :
현재 나는 mysql을 docker container로 생성하여 데이터를 보존하기 위해
volume옵션을 생성하고 있었는데 그것 때문일 수 있다는 글을 보고 volume을 삭제
docker-compose up doesn't rebuild image although Dockerfile has changed · Issue #1487 · docker/compose
Very often, docker-compose up doesn't rebuild image specified as "build:" in the docker-compose.yml although the respective Dockerfile has changed. Instead, I need to run docker build -t servicenam...
github.com
정상적으로 build에 성공 ...!
문제 3. 각각의 옵션을 잘 알지 못하며 무엇을 빼놓았는지 알지 못함 :
docker-compose 파일의 옵션 (공식문서는 너무 많으므로 블로그참고)을 참고하여
각각의 속성 파악 및 없는 속성 추가해보기
docker-compose 파일
version: "3.7"
services:
app:
image: node:20-alpine
# command: sh -c "npm install && npm start" => 에러 나므로 삭제
build: . #build옵션 지정 Dockerfile사용해서 build 해야하므로 현재 경로 지정
ports:
- 5001:5001
depends_on:
- mysql
environment:
MYSQL_HOST: mysql
MYSQL_DB: mysql-container
MYSQL_ROOT_USER: ${DB_USER}
MYSQL_ROOT_PASSWORD: ${DOCKERMYSQL_PASSWORD}
volumes:
- refrigerator-mysql-data:/usr/src/app
networks:
- refrigeratornetwork
mysql:
image: mysql:8
platform: linux/arm64
ports:
- 3306:3306
volumes:
- refrigerator-mysql-data:/usr/src/mysql
environment:
MYSQL_ROOT_USER: ${DB_USER}
MYSQL_ROOT_PASSWORD: ${DOCKERMYSQL_PASSWORD}
MYSQL_DATABASE: mysql-container
networks:
- refrigeratornetwork
volumes:
refrigerator-mysql-data:
networks:
refrigeratornetwork:
driver: bridge #external옵션에서 변경. 직접 설정하지 않고 자동으로 생성해줄 수 있게됨
1. version : 정보를 위함이며 compose는 이걸 사용하지 않는다.
2. name: project name으로 사용됨. 환경변수로도 사용됨 (COMPOSE_PROJECT_NAME)
3. services: 컨테이너를 실행하기 위해 정의
4. container name : services내부에 컨테이너의 이름 지정
5. image: 컨테이너에 사용될 이미지
6. build: Dockerfile 빌드하기 위해 Dockerfile이 있는 경로 지정
7. restart : no(수동), always(컨테이너 수동으로 끄기전까지 재시작), on-failure(오류있을시 재시작)
8. environment : 환경변수 설정
9. volumes: 지정한 경로의 볼륨 마운트
10. depends_on : services간 종속 설정
11. expose : 컨테이너간 통신할 때는 컨테이너 내부에만 공개하는 공개 포트 지정
Docker-compose.yml 구성 요소 사용법
Docker compose 파일에서 사용되는 모듈에 대해서 확인 해보도록 하겠습니다.
medium.com
expose : 컨테이너간 통신할때
[Docker] Docker Compose ports/expose(컨테이너 간 통신)
컨테이너 간 통신(ports/expose) Docker Compose에서 컨테이너가 공개하는 포트는 ports로 지정합니다. '호스트 머신의 포트 번호:컨테이너의 포트 번호'를 지정하거나, 컨테이너의 포트번호만 지정합니
kimjingo.tistory.com
에러상황 해결:
docker-compose 파일을 활용해 build를 해도
container를 생성하지 못함
해결 완료되어 컨테이너는 아래와 같이 정상적으로 생성하게 됨
문제 4. Error response from daemon: network refrigeratornetwork not found :
해결 :
networks 설정이 잘못 된 것일 것같아 설정을 external에서 driver bridge로 변경해봄
아직 해결 하지 못한 에러 : Error connecting to database ConnectionRefuseError
이것은 다음글에서
'공부기록 > Backend' 카테고리의 다른 글
[docker] 백엔드 docker-compose 파일 build 에러 디버깅해보기 3 (Error connecting to database ConnectionRefuseError 에러) - 해결완료!!! (0) | 2024.02.14 |
---|---|
[docker] 백엔드 docker-compose 파일 build 에러 디버깅해보기 1 (0) | 2024.02.13 |
docker compose 파일에 network 간단한 구성 (0) | 2024.02.12 |
docker 명령어 모음 (업데이트중) (0) | 2024.02.12 |
[mysql] 비밀번호 설정하기 (1) | 2024.02.10 |