본문 바로가기
Docker

맥북 오라클 데이터베이스 연결 + Docker

by Byeong 2025. 3. 17.

기존에 프로젝트를 진행하며 오라클 데이터베이스를 사용하려 했지만 연결에 실패했었다. 

로컬환경에서 오라클 데이터베이스 연결을 진행해 보려고 한다.

 


문제 

맥북에서 Docker를 이용해 gvenzl/oracle-xe 이미지를 실행시 다음과 같은 오류가 발생했다.

WARNING: The requested image's platform (linux/amd64) does not match 
the detected host platform (linux/arm64/v8) and no specific platform was requested

해결 방법: Colima 사용

맥북에서는 공식적으로 오라클이 지원되지 않는다.

따라서 Colima를 사용해 x86_64 환경에서 실행하면 정상적으로 사용할 수 있다.

Colima란?

Colima는 Docker Desktop을 대신하여 가벼운 가상 머신에서 컨테이너를 실행할 수 있는 오픈 소스 소프트웨어이다.

설치 및 실행

brew install colima
colima start --memory 4 --arch x86_64

colima를 이용하면 Docker Desktop과 전혀 다른 환경으로 실행되며 이미지도 공유되지 않는다.

오라클 컨테이너 실행

docker run -d --name=oracle_c --restart=unless-stopped -p 1521:1521 -e ORACLE_PASSWORD=my_password gvenzl/oracle-xe:21-full

컨테이너 상태 확인

CONTAINER ID   IMAGE                      COMMAND                  CREATED         STATUS         PORTS                                         NAMES
4cdbf16504ae   gvenzl/oracle-xe:21-full   "container-entrypoin…"   9 seconds ago   Up 8 seconds   0.0.0.0:1521->1521/tcp, [::]:1521->1521/tcp   oracle_c

상태를 보니 잘 실행 된것을 확인 가능하다.

docker logs -f 컨테이너명 을 통해서도 확인이 가능하지만 DBeaver를 연결을 통해 확인 해보자.

Dbeaver 연결


오라클 데이터베이스 접속

docker exec -it 컨테이너이름 sqlplus
SQL*Plus: Release 21.0.0.0.0 - Production on Sun Mar 16 14:39:18 2025
Version 21.3.0.0.0

Copyright (c) 1982, 2021, Oracle.  All rights reserved.

Enter user-name: system
Enter password:
Last Successful login time: Sun Mar 16 2025 14:38:09 +00:00

Connected to:
Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0

SQL>

접속 종료: Control + D


Scott 계정 생성 (연습용 계정)

기본 System 계정 이외에 연습용 계정을 생성해 준다.

접속

	docker exec -it 컨테이너이름 sqlplus

계정 생성

CREATE USER scott identified by tiger;

권한 부여

	GRANT CONNECT, resource, dba to scott;

생성 확인 및 결과:

SQL> CREATE USER scott identified by tiger;

User created.

SQL> GRANT CONNECT, resource, dba to scott;

Grant succeeded.

SQL> select username from dba_users where username = 'SCOTT';

USERNAME
--------------------------------------------------------------------------------
SCOTT

데이터 유지 : Volumes 설정

컨테이너 내부에서 데이터를 생성하면 컨테이너가 중지되거나 삭제될 때 데이터도 함께 삭제된다.

이를 방지하기 위해 볼륨을 지정해 데이터가 유지되도록 한다.

볼륨 디렉터리 생성

mkdir ~/Documents/oracledb

볼륨 경로 지정

docker run -d --name 컨테이너이름 -v ~/Documents/oracledb:/opt/oracle/oradata -p 1521:1521 -e ORACLE_PASSWORD=my_password gvenzl/oracle-xe

~/Documents/oracledb:/opt/oracle/oradata 을 통해 경로를 지정해 줬다.

볼륨 지정시 권한 문제로 비밀번호 지정이 어차피 문제되기 때문에 환경변수로 선언하는 비밀번호는 의미가 없다.


권한 설정

만든 데이터베이스를 접속하려고 system의 이름과 컨테이너 제작시 설정한 비밀번호를 입력해도 접속이 불가능하며 컨테이너가 종료된다.

권한 문제로 /opt/oracle/oradata 의 소유주가 호스트의 uid로 지정 되있어서 발생하는 문제이다.

호스트에서 해당 컨테이너가 볼륨을 마운트 된 폴더에 접근을 할 수 있도록 권한 설정을 따로 해 주면 해결된다.

docker exec -it 컨테이너이름 id

출력

uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),54322(dba),54323(oper),54324(backupdba),54325(dgdba),54326(kmdba),54330(racdba)

해당 컨테이너 내부에서 oracle 이라는 이름의 uid는 54321인 것으로 확인 되며 uid로 소유자을 변경 하면 된다.


소유주 및 퍼미션 변경

소유주 변경

sudo chown -R 54321:54321 ~/Documents/oracledb

소유주 변경 확인

docker exec -it 컨테이너이름 ls -al /opt/oracle/oradata

퍼미션 변경

퍼미션을 열어 주지 않을 경우 호스트에 권한이 없어서 컨테이너를 띄울 때 문제가 발생 한다.

sudo chmod -R 777 oracledb

비밀번호 변경

docker exec oracle resetPassword <원하는 비밀번호>

원하는 비밀번호로 변경후 접속해주면 원할하게 접속이 된다.

 


마무리

docker를 이용해 오라클 데이터베이스에 접속해보았다. 다음에는 FastAPI를 통해 오라클 데이터베이서에 연결을 확인해보려고 한다.


참고 

https://www.oracle.com/kr/database/technologies/instant-client/macos-intel-x86-downloads.html

https://ete-llorona.tistory.com/16

https://kkwor1d.tistory.com/57

https://shanepark.tistory.com/400