2016-10-13 1 views
1

Je suis en train d'obtenir une image docker Oracle XE pour fonctionner sur ma machine Redhat 7 mais Oracle échoue au démarrage et je peux voir dans son journal des alertes suivantes:Exécution d'une image XE Oracle Docker sur un hôte Redhat

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

Je peux exécuter l'image correctement ailleurs mais elle échoue sur le serveur RedHat. Initialement, je pensais que cela pouvait être dû à une tentative d'exécution d'une image basée sur Ubuntu sur Redhat mais j'ai essayé avec différentes images basées sur Ubuntu 14, Ubuntu 16, Centos 6 et Centos 7 et tous ont le même problème.

C'est la sortie de « version docker »:

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 

Je ne sais pas vraiment où aller d'ici. Malheureusement, je n'ai pas d'autre choix que de lancer RHEL7 sur mon serveur, ce qui n'est pas une option.

Si quelqu'un a des idées, je serais reconnaissant.

Répondre

1

J'ai réussi à faire fonctionner les choses en désinstallant le docker fourni Redhat (qui était la version 1.10) et en installant les derniers RPM 1.12 fournis par Docker eux-mêmes.

Je ne sais pas si le correctif est dû à l'exécution d'un Docker ultérieur ou parce que Redhat a apporté des modifications aux binaires Docker qu'ils fournissent.

1

Je n'ai pas fait cela avec RHEL mais j'ai été capable de le faire en utilisant CentOS 7 minimal installé directement sur un hôte (assez proche). L'hôte a ensuite été mis en place pour ssh, mise à jour &, vsftp ftp/tls, selinux, docker etc Après avoir eu une base décente de choses que je savais que j'avais besoin de l'hôte pour soutenir, j'ai fait une image de base en utilisant mkimage-yum.sh (https://github.com/moby/moby/blob/master/contrib/mkimage-yum.sh). C'est ce qui a produit l'image référencée dans le Dockerfile ci-dessous (centos-base-image: 7.3.1611). À partir de ce point, j'ai créé un Dockerfile et un répertoire d'actifs qui sont adjacents sur le système de fichiers. Dans le répertoire des assets, j'ai dézippé une copie de Oracle Database Express Edition 11g Release 2 pour Linux x64 et créé un fichier setOracleEvn.sh qui va définir quelques variables d'environnement. Maintenant que le contenu de xe tar n'est pas compressé, mettez à jour le fichier Disk1/response/xe.rsp pour configurer les ports et le mot de passe par défaut.

À ce stade, vous devriez être en mesure de créer un Dockerfile ADD s le répertoire asserts dans le conteneur et invoque rpm et installe XE. J'ai utilisé le fichier Disk1/response/xe.rsp extrait pour configurer les ports par défaut et le mot de passe car c'était la solution la plus simple (en évitant les commandes sed). Si vous vouliez une installation purement scriptée, vous pouvez ajouter le logiciel zip que vous voulez dans la phase d'installation de yum et effectuer les opérations.

je suis tombé sur quelques obstacles:

  1. Docker de/dev/default SHM de 64MB est petite pour exécuter la configuration Oracle.
  2. Un problème avec la politique SELinux arrêter le /etc/init.d/oracle-xe configure < response/xe.rsp d'exécuter avec succès.
  3. RPM -h (hachage) option de rupture du processus de configuration.
  4. Container a tendance à arrêter après tout CMD est exécutée.

Ce qui suit est la structure des répertoires et fichiers:

ls-du répertoire parent

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

ls actifs -la/

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

ls - la assets/oracle-xe-11.2.0-1.0x86_64

drwxr-xr--. 4 xxx xxx ... Disk1 

ls biens-la/oracle-xe-11.2.0-1.0x86_64/Disk1

-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 réponse/xe.rsp - assurer son vide de tout sauf le port http, port d'écoute tns , mot de passe et y/n pour démarrer au démarrage (les choses se cassent si les commentaires sont laissés dans le fichier).

8080 
1521 
welcome1 
welcome1 
y 

vi actifs/exportOracleEnv.sh - oracle définit vars pour chaque 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 

Le Dockerfile est un peu occupé, mais voici comment j'ai pu faire fonctionner les choses. J'utilise docker depuis quelques jours et linux depuis deux semaines alors pardonnez-moi de ne pas avoir la solution la plus élégante à cela.

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 

Assurez-vous que lorsque vous vous construisez spécifiez --shm taille (en cours d'exécution de la dir Dockerfile)

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

Et encore une fois (taille --shm) lorsque vous exécutez le conteneur, assurez - Options DTI pour maintenir le fonctionnement du conteneur CentOS 7 après le CMD exécute

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 

Enfin, vous devriez être en mesure de se connecter via ssh faire ssh vous a commencé, vous pouvez utiliser les journaux docker -f oracle-db à surveiller ssh sortie à propos de th Les clés ecdsa manquent. Note: Comme votre bâtiment répare encore et encore les choses, après avoir accepté un certificat ssh de votre client et que vous avez lancé une nouvelle commande de construction docker, vous devrez supprimer l'ancien certificat rm: remove regular file ‘/root/.ssh/known_hosts’? yes. Le mot de passe est défini dans le Dockerfile à admin

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

Une fois ssh est établie, vous pouvez maintenant exécuter sqlplus, connectez-vous en tant que système: Welcome1

[[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 

Si quelqu'un peut trouver une solution à la politique de SELinux arrêter le processus de configuration avec Oracle-xe ce serait génial d'avoir enfin résolu cela.