2017-11-15 5 views
0

docker store (https://store.docker.com/images/oracle-database-enterprise-edition)의 Oracle 12c Enterprise Edition 이미지를 기반으로 컨테이너에서 도커 이미지를 만들려고합니다. 컨테이너가 정상적으로 작동하면 컨테이너를 정지 한 후 다음 명령으로 해당 컨테이너를 기반으로 이미지를 만듭니다.컨테이너 symlink에서 생성 된 Docker Oracle12c Enterprise 이미지가 깨졌습니다.

docker commit Oracle_12 oracle/oradb:1 

그런 다음, 우리는 다음 명령으로 최선을 다하고 이미지를 사용하여 컨테이너를 실행하려고 :

docker run -d -it --name oradb_cont -p 1512:1521 -p 5500:5500 oracle/oradb:1 

이 컨테이너는 다음과 같은 오류와 함께 실패합니다

Start up Oracle Database 
Wed Nov 15 10:31:29 UTC 2017 
start database 
start listener 
The database is ready for use . 
tail: cannot open '/u01/app/oracle/diag/rdbms/orclcdb/ORCLCDB/trace/alert_ORCLCDB.log' for reading: No such file or directory 
tail: no files remaining 
이 컨테이너가 "

Exited "메시지가"데이터베이스를 사용할 준비가되었습니다 "라고 표시합니다. 누락 된 파일의 위치를 ​​검사하기 위해 컨테이너에 bash를 연결했습니다. 그리고 결과가 "/ DIAG"폴더가 깨진 심볼릭 링크 것 같다 :

enter image description here

원래 오라클 12C 컨테이너를 시작하고 떠들썩한 파티를 부착, 폴더가 존재합니다. 심볼릭 링크가 깨 졌거나 파일이 컨테이너에서 생성 된 이미지에만 존재하지 않는 것 같습니다.

답변

0

문제는 /ORCL이 데이터 볼륨이라는 것입니다. 확약 조작에는 볼륨 안에있는 파일이 포함되지 않습니다. 자세한 내용은 commit documentation을 확인하십시오.

따라서 새 인스턴스를 시작할 때 로그 파일이 참조되고 있으며 아직 생성되지 않은 것처럼 보입니다. 커밋 된 컨테이너에있는 '/ ORCL'아래의 파일이 새 인스턴스에서 누락되어 현재 컨테이너의 상태가 일관되지 않습니다.

새 시스템에서 새 인스턴스를 실행하는 경우 이전 볼륨을 새 시스템으로 마이그레이션해야합니다. 일반적으로 <volume-name-or-id>:/ORCL

: 당신은 docker inspect -f '{{ .Mounts }}' <old-container-name>을 실행하여 기존 컨테이너의 볼륨을 발견하고 바로 사용하여 이전 볼륨을 마운트, How to port data-only volumes from one host to another? 동일한 시스템에 새 인스턴스를 실행하는 경우

에 지정된대로 마이그레이션 할 수 있습니다 모범 사례로서 컨테이너의 동일한 인스턴스를 가져 오기 위해 커밋 명령에 의존해서는 안됩니다. 오히려 기본 이미지를 확장하는 DockerFile을 작성한 다음 새 인스턴스에 복사 할 파일 만 선택하여 사용자 정의를 추가하십시오.