2017-01-16 15 views
2

oraclelinux:7.1イメージ(Dockerバージョン1.12.5)に基づいてドッキング・コンテナにOracle 12cをインストールしました。しかし、少し問題があります。コンテナを実行すると、ディレクトリ/docker-entrypoint-initdb.dにある自分のスクリプトは実行されません(DBユーザの作成、付与の実行、スキーマの設定など)。ここで何が問題になるでしょうか?/docker-entrypoint-initdb.dディレクトリ内のSQLスクリプトは実行されません

/docker-entrypoint-initdb.dとその中のすべてのSQLファイルには、アクセス権が777に設定されています。デフォルトのシステムユーザーを使用してDBにログインできます。あなた以下

はDockerfileコピーSQLスクリプトを見つけることができます:

FROM oracle-12c:latest 

USER oracle 
ENV ORACLE_SID ORCL 
ENV ORACLE_HOME /u01/app/oracle/product/12.1/db_1 
ENV PATH $PATH:$ORACLE_HOME/bin 
USER root 

RUN echo $PATH 
COPY init-scripts/* /docker-entrypoint-initdb.d/ 

EXPOSE 1521 

私のコンテナからのログ:私はあなたがドッキングウィンドウ・エントリポイントの一部を話していると仮定してい

2017-01-13T15:43:09.158097846Z 
************************** 
**** Starting up... **** 
************************** 
2017-01-13T15:43:09.158142165Z 
/home/oracle/.bashrc: line 12: /usr/sbin/groupadd: Permission denied 
2017-01-13T15:43:09.308941164Z 
LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 13-JAN-2017 15:43:09 
2017-01-13T15:43:09.308978154Z 
Copyright (c) 1991, 2014, Oracle. All rights reserved. 
2017-01-13T15:43:09.308987178Z 
Starting /u01/app/oracle/product/12.1/db_1/bin/tnslsnr: please wait... 
2017-01-13T15:43:09.314168904Z 
TNSLSNR for Linux: Version 12.1.0.2.0 - Production 
Log messages written to /u01/app/oracle/diag/tnslsnr/5657f8f40e69/listener/alert/log.xml 
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=5657f8f40e69)(PORT=1521))) 
2017-01-13T15:43:15.939107815Z 
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521)) 
STATUS of the LISTENER 
------------------------ 
Alias      LISTENER 
Version     TNSLSNR for Linux: Version 12.1.0.2.0 - Production 
Start Date    13-JAN-2017 15:43:09 
Uptime     0 days 0 hr. 0 min. 6 sec 
Trace Level    off 
Security     ON: Local OS Authentication 
SNMP      OFF 
Listener Log File   /u01/app/oracle/diag/tnslsnr/5657f8f40e69/listener/alert/log.xml 
Listening Endpoints Summary... 
    (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=5657f8f40e69)(PORT=1521))) 
The listener supports no services 
The command completed successfully 
/home/oracle/.bashrc: line 12: /usr/sbin/groupadd: Permission denied 
Processing Database instance "ORCL": log file /u01/app/oracle/product/12.1/db_1/startup.log 
/home/oracle/.bashrc: line 12: /usr/sbin/groupadd: Permission denied 
2017-01-13T15:43:42.583817187Z 
LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 13-JAN-2017 15:43:42 
2017-01-13T15:43:42.583862324Z 
Copyright (c) 1991, 2014, Oracle. All rights reserved. 
2017-01-13T15:43:42.583872256Z 
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521)) 
STATUS of the LISTENER 
------------------------ 
Alias      LISTENER 
Version     TNSLSNR for Linux: Version 12.1.0.2.0 - Production 
Start Date    13-JAN-2017 15:43:09 
Uptime     0 days 0 hr. 0 min. 33 sec 
Trace Level    off 
Security     ON: Local OS Authentication 
SNMP      OFF 
Listener Log File   /u01/app/oracle/diag/tnslsnr/5657f8f40e69/listener/alert/log.xml 
Listening Endpoints Summary... 
    (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=5657f8f40e69)(PORT=1521))) 
Services Summary... 
Service "ORCL" has 1 instance(s). 
    Instance "ORCL", status READY, has 1 handler(s) for this service... 
The command completed successfully 
2017-01-13T15:43:42.609310535Z 
************************** 
**** Startup finished **** 
************************** 
2017-01-13T15:43:42.609351046Z 
+0

私はここではっきりと分からないかもしれませんが、最初に '/ docker-entrypoint-initdb.d /'のスクリプトを実行する必要がありますか?ドッカー? Oracle DB起動スクリプト?あなたのログインシェル? –

+0

@FrankSchmitt:これはデフォルトの動作ではありませんか? Oracle 11gのコンテナでこれらのスクリプトが実行されました。 Oracle 12cのイメージは、Oracle 11gイメージのDockerfileに基づいています。私はおそらく何かを見逃してしまったが、私は何が分からない。 – lasjak

答えて

3

.sh:

for f in /docker-entrypoint-initdb.d/*; do 
    case "$f" in 
     *.sh)  echo "[IMPORT] $0: running $f"; . "$f" ;; 
     *.sql) echo "[IMPORT] $0: running $f"; echo "exit" | su oracle -c "NLS_LANG=.$CHARACTER_SET /u01/app/oracle/product/12.1.0/xe/bin/sqlplus -S/as sysdba @$f"; echo ;; 
     *)  echo "[IMPORT] $0: ignoring $f" ;; 
    esac 
    echo 
done 

私は、MySQLとPostgreSQLのドッカーとワークワークで同じ問題を扱っていますこれまでのところ、絶対パスでループすることがわかった。ドッキングウィンドウ・エントリポイントで次に

# docker-entrypoint.sh 
COPY docker-entrypoint.sh /usr/local/bin/ 
RUN chmod +x /usr/local/bin/docker-entrypoint.sh 

# Database scripts 
COPY init-scripts/ /usr/local/bin/docker-entrypoint-initdb.d/ 
RUN chmod -R +x /usr/local/bin/docker-entrypoint-initdb.d 
  • 、:ような何かを、Dockerfileで

    1. :我々は非常にシンプルであるかもしれない実際の説明を見つけるまでは、ここにあなたが何ができるかです。 SH、イメージをビルドして実行すると

    for f in /docker-entrypoint-initdb.d/*; do 
    to 
    
        for f in /usr/local/bin/docker-entrypoint-initdb.d/*; do 
    

    を変更。あなたのスクリプトを実行しているはずです。 希望に役立ちます。

  • 関連する問題