2016-10-13 3 views
1

내 레드햇 7 시스템에서 실행하기 위해 오라클 XE 고정 표시기 이미지를 얻기 위해 노력하고 있지만, 오라클은 시작하는 동안 실패하고 나는 그것의 경고가 다음 로그에서 볼 수 있습니다는 레드햇 호스트에 오라클 XE 도커 이미지를 실행

Exception [type: SIGSEGV, Address not mapped to object] [ADDR:0x7F80083C5FF8] [PC:0x20CB441, ksmem_free()+31] [flags: 0x0, count: 1] 

이미지를 다른 곳에서 제대로 실행할 수는 있지만 Redhat 서버에서는 오류가 발생합니다.

처음에는 Redhat에서 우분투 기반 이미지를 실행하려고했기 때문에 생각했지만 우분투 14, 우분투 16, Centos 6 및 Centos 7을 기반으로 한 다른 이미지를 사용해 보았습니다. 모두 동일한 문제가 있습니다.

Client: 
Version:  1.10.3 
API version: 1.22 
Go version: go1.5.3 
Git commit: 20f81dd 
Built:  Thu Mar 10 21:49:11 2016 
OS/Arch:  darwin/amd64 

Server: 
Version:  1.10.3 
API version: 1.22 
Go version: go1.6.2 
Git commit: 5206701-unsupported 
Built:  Mon Aug 29 14:00:01 2016 
OS/Arch:  linux/amd64 

난 정말 여기에서 다음 이동하는 방법을 알고하지 않습니다

은 '고정 표시기 버전'의 출력입니다. 불행히도 옵션이 없도록 내 서버에서 RHEL7을 실행하는 것 외에는 선택의 여지가 없습니다.

누구나 아이디어가 있다면 감사 할 것입니다.

답변

1

레드햇에서 제공 한 도커 (버전 1.10)를 제거하고 Docker가 제공 한 최신 1.12 RPM을 설치하여 작업 할 수있었습니다.

수정 프로그램이 나중의 Docker를 실행했기 때문에 또는 Redhat이 제공 한 Docker 바이너리에 일부 변경 사항을 적용했는지 여부는 알 수 없습니다.

1

RHEL에서는이 작업을 수행하지 않았지만 최소한 CentOS 7을 호스트에 직접 설치하여이 작업을 수행 할 수있었습니다 (충분히 근접). 그 다음 호스트는 ssh에 대해 설정되었고 업데이트 & 업그레이드, vsftp ftp/tls, selinux, docker 등을 설정했습니다. 지원해야 할 호스트가 필요하다는 것을 알았을 때 나는 mkimage-yum.sh를 사용하여 기본 이미지를 만들었습니다. (https://github.com/moby/moby/blob/master/contrib/mkimage-yum.sh). 이것은 아래의 Dockerfile에서 참조 된 이미지를 생성 한 것입니다 (centos-base-image : 7.3.1611).

uname -a 
Linux CentOS7 3.10.0-514.16.1.el7.x86_64 #1 SMP Wed Apr 12 15:04:24 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux 

docker version 
Client: 
Version:   1.12.6 
API version:  1.24 
Package version: docker-common-1.12.6-16.el7.centos.x86_64 
Go version:  go1.7.4 
Git commit:  3a094bd/1.12.6 
Built:   Fri Apr 14 13:46:13 2017 
OS/Arch:   linux/amd64 

Server: 
Version:   1.12.6 
API version:  1.24 
Pack age version: docker-common-1.12.6-16.el7.centos.x86_64 
Go version:  go1.7.4 
Git commit:  3a094bd/1.12.6 
Built:   Fri Apr 14 13:46:13 2017 
OS/Arch:   linux/amd64 

이 시점부터 파일 시스템에서 인접한 Dockerfile과 assets 디렉토리를 만들었습니다. 자산 dir에서 Linux x64 용 Oracle Database Express Edition 11g 릴리스 2의 사본을 압축 해제하고 몇 가지 환경 변수를 설정할 setOracleEvn.sh 파일을 작성했습니다. 이제 xe tar의 내용을 압축 해제 했으므로 Disk1/response/xe.rsp 파일을 업데이트하여 기본 포트와 암호를 구성하십시오.

이 시점에서 ADD ADS 이 컨테이너에 어설 션 디렉토리 인 dockerfile을 생성하고 rpm을 호출하고 XE를 설치할 수 있어야합니다. 추출 된 Disk1/response/xe.rsp 파일을 사용하여 기본 포트와 암호를 구성하는 것이 가장 간단한 해결책이었습니다 (sed 명령 사용 안 함). 순수한 스크립팅 설치를 원한다면 원하는 설치 프로그램을 추가하고 설치 작업을 수행 할 수 있습니다.

나는 몇 가지 장애물로 실행 :

  1. 64메가바이트의 부두 노동자의는/dev/SHM 기본은 오라클 구성을 실행하는 작은이다.
  2. SELinux 정책이 성공적으로 실행에서 /etc/init.d/oracle-xe configure < response/xe.rsp 중지에 대한 문제.
  3. RPM -h (해시) 옵션은 구성 프로세스를 중단합니다.
  4. 컨테이너 CMD의 모든 실행 후 중지하는 경향이있다.
정보 디렉토리 구조 및 파일 :

LS -la 부모 디렉토리에서

drwxr-xr--. 3 user group ... assets 
-rwxr-xr--. 1 xxx xxx ... 1 11:22 Dockerfile 

LS -la 자산/

-rwxr-xr--. 1 xxx xxx ... exportOracleEnv.sh 
drwxr-xr--. 3 xxx xxx ... oracle-xe-11.2.0-1.0x86_64 

LS - 자산/oracle-xe-11.2.0-1.0x86_64

,451,515,
drwxr-xr--. 4 xxx xxx ... Disk1 

LS -la 자산/오라클 XE-11.2.0-1.0x86_64/디스크 1

-rwxr-xr--. 1 xxx xxx ... oracle-xe-11.2.0-1.0.x86_64.rpm 
drwxr-xr--. 2 xxx xxx ... response 
drwxr-xr--. 2 xxx xxx ... upgrade 

VI 응답/xe.rsp을 - HTTP 포트, TNS 리스너 포트 아무것도하지만, 자사의 무효 확인 , 암호 및 부팅시 y/n을 사용합니다 (주석이 파일에 남아 있으면 문제가 발생합니다).

8080 
1521 
welcome1 
welcome1 
y 

VI 자산/exportOracleEnv.sh - 설정 오라클은 모든 bash는

#!/bin/sh 

echo 'export ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe' >> ~/.bashrc 
echo 'export PATH=$ORACLE_HOME/bin:$PATH' >> ~/.bashrc 
echo 'export ORACLE_SID=XE' >> ~/.bashrc 
echo 'export LISTENERS_ORA=/u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora' >> ~/.bashrc 

Dockerfile 조금 바쁜 위해 바르하지만 내가 일하는 것을 얻을 수있었습니다 방법이다. 나는 며칠 동안은 이제 도커를 사용하고 있으며, 2 주 동안 리눅스를 사용하여 가장 우아한 해결책이 없다는 것을 용서합니다.당신은 당신이 용기를 실행할 때

docker build --shm-size=2g -t centos-oracle:7.3.1611 . 

그리고 다시 (--shm 크기), 확인 --shm 크기합니다 (Dockerfile의 디렉토리에서 실행)를 지정 빌드 할 때

FROM centos-base-image:7.3.1611 

#do not use $ in ENV: https://github.com/moby/moby/issues/25099 
ENV _rpmLocation /assets/oracle-xe-11.2.0-1.0x86_64/Disk1 

#installing epel because its required to resolve net-tools, your milage may very depending on what image your starting with. 
RUN yum -y install epel-release libaio bc flex && yum -y install net-tools kernel-devel 

#oracle uncompressed zip file provided in assets directory, also provides preconfigured response file 
ADD assets /assets 

WORKDIR ${_rpmLocation} 

# echo $ORACLE_HOME just because I like to know the process worked as I expect. The environment variables must be in place before running configure. 
RUN rpm -i oracle-xe-11.2.0-1.0.x86_64.rpm && /assets/exportOracleEnv.sh && echo $ORACLE_HOME 

# execute oracle-xe configure with response file 
RUN /etc/init.d/oracle-xe configure < response/xe.rsp 

WORKDIR/

#clean up temp files, create ssh key and ensure known root password. 
#Finally set the final hostname to listen to all interfaces in tnsnames/listeners.ora otherwise the files will have the incorrect host name (it changes with every layer). 
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N '' && systemctl enable sshd && echo "root:admin" | chpasswd && rm -rf ${_ASSETS} && \ 
    sed -i -E "s/HOST = [^)]+/HOST = 0.0.0.0/g" /u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora && \ 
    sed -i -E "s/HOST = [^)]+/HOST = 0.0.0.0/g" /u01/app/oracle/product/11.2.0/xe/network/admin/tnsnames.ora 

#start sshd first (allows immediate connections via ssh) then db. leave tail running in forground 
CMD /sbin/sshd && /etc/init.d/oracle-xe start && tail -f /dev/null 

확인 - CMD를 마지막으로

docker run --shm-size=2g --name oracle-db -d -t -i -p 5022:22 -p 5080:8080 -p 1521:1521 centos-oracle:7.3.1611 

확실 SSH를 시작하게 ssh를 통해 연결할 수 있어야합니다을 실행 한 후 DTI 옵션은 SSH를 감시하기 위해 -f 오라클 DB는 고정 표시기 로그를 사용할 수 있으며, CentOS는 7 용기 프로그램을 계속 실행하기 th에 관한 결과 ecdsa 열쇠가 누락되었습니다. 참고 : 건물을 반복해서 설치하면서 클라이언트의 ssh 인증서를 수락하고 새 docker 빌드 명령을 발행 한 후에는 이전 인증서 rm: remove regular file ‘/root/.ssh/known_hosts’? yes을 제거해야합니다. 암호는 SSH는 지금, SQLPLUS를 실행하는 시스템으로 로그인 할 수 있습니다 설정되면

ssh -p 5022 [email protected] 
... 
[email protected]'s password: 
Authenticated to 127.0.0.1 ([127.0.0.1]:5022). 

를 관리자에하는 Dockerfile에 설정됩니다 사람이 SELinux 정책에 대한 해결책을 마련 할 수있는 경우

[[email protected] ~]# sqlplus 

SQL*Plus: Release 11.2.0.2.0 Production on Mon May 1 17:22:55 2017 

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

Enter user-name: system 
Enter password: 

Connected to: 
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production 

SQL> select * from v$version; 

BANNER 
-------------------------------------------------------------------------------- 
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production 
PL/SQL Release 11.2.0.2.0 - Production 
CORE 11.2.0.2.0  Production 
TNS for Linux: Version 11.2.0.2.0 - Production 
NLSRTL Version 11.2.0.2.0 - Production 

을 welcome1 oracle-xe로 구성 프로세스를 중지하면 마침내 해결할 수 있습니다.