podman / 도커
docker에서 db container를 실행한 이후에 app container 에서 flywayMigration 실행
주의할점은 나는 podman (root)과 podman-compose (root)를 이용했다. 여기 정리된 이슈에는 docker를 이용하면 발생하지 않을 문제도 있을 수 있다.
처음에 하려던 것은 다음과 같다.
- 다음 2개의 container를 만들고
- DB container 1 개
- Application 1개(WAS)
- DB 가 run 한 이후에 app 을 이용해서, db 의 초기값을 생성(flywayMigration)
- Application –> DB : database 생성
- Application –> DB : flywayMigrate 실행
최종적으로 만든 내용은 다음 repo에 있다.
발생했던 이슈
- windows 의 directory 를 db 의 data volume 으로 줬다.
- ‘VOLUMN’ 의 문제인지 windows 의 filesystem의 문제인지는 모르나, volumne 안의 file 들에 대한 chmod가 동작하지 않았다.
- 이것이 mariadb 의 trigger를 생성하는 sql 에서 permission 관련 문제를 일으켰다.
- 참고 –> chmod 이 필요한 경우 주의
- mariadb container가 뜨지 않았다.
- 이것은 entrypoint 의 문제였다.
- wsl2 의 접근
- db 로 접근해보려고, windows 에서 wsl2 의 container 에 접근하려 했다.
- windows cmd에서 다음 command로 wsl2의 ip주소를 확인할 수 있다.
wsl2 hostname -I
- db container가 실행된 이전에 application container 가 접근을 시도.
- 결국
wait_for_it.sh
로 해결 - wait-for-it.sh
- How to use wait-for-it in docker-compose file? - Stack Overflow : 이 방법은 제대로 동작하지 않았다.
- alpine 에서 wait-for-it.sh 를 사용하려면
bash 가 필요: Wait for it is not working with node:17-alpine · Issue #118 · vishnubob/wait-for-it · GitHub
bash 설치후 ‘sh’ 을 빼고 실행 /wait-for-it.sh: 75: /wait-for-it.sh: Syntax error: “(” unexpected (expecting “;;”) · Issue #69 · vishnubob/wait-for-it · GitHub
-t 0
는 무한대 시간이다. 이것을 사용해야 DB 가 실행되기 전까지 실행하지 않는다. 그렇지 않으면, 잠깐 쉬고, 실행을 한다.compose.yml
에서-t
option 은 동작안했고,--timeout=
option 은 동작했다.entrypoint: - ./wait-for-it.sh - db:3306 - -t - 40 - -- - ./my-entrypoint.sh
entrypoint: - ./wait-for-it.sh - db:3306 - --timeout=40 - -- - ./my-entrypoint.sh
- dockerize 방법은 제대로 동작하지 않았다. : Docker-Compose: how to wait for other service to be ready? - Stack Overflow
--wait
,health_check
은 podman 에서--wait
을 지원하지 않았다.
- 결국
- build 시점과 runtime 에 할 수 있는 것들의 구분
- application –> DB에 접근하는 것을
RUN
으로 넣었다. 하지만 그것이 성공할 리 없었다.
- application –> DB에 접근하는 것을
tips
- terminal 접속
- compose2.yml 을 만들어 사용
- 계속 run 하도록 해서 terminal 을 열때는, compose.yml 을 복사해서, entrypoint 에
tail -f /dev/null
을 넣어서 사용하자. docker compose -f compose2.yml up
댓글 없음:
댓글 쓰기