2017-11-15 10 views
0

dockerストア(https://store.docker.com/images/oracle-database-enterprise-edition)のOracle 12c Enterprise Editionイメージに基づくコンテナからドッキング・イメージを作成しようとしています。コンテナは正常に動作しているので、コンテナを停止した後、次のコマンドでそのコンテナに基づいたイメージを作成します。Docker Oracle12c Enterpriseイメージがコンテナsymlinkから作成されました。

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 

コンテナが " 「データベースは使用可能です」というメッセージが表示されますが、「終了」と表示されます。 不足しているファイルの場所を調べるために、コンテナにbashを付けました。そして、結果は「/ DIAG」フォルダが壊れたシンボリックリンクであることのようだ:

enter image description here

元のOracle 12cのコンテナを開始し、bashのを取り付け、フォルダが存在しています。シンボリックリンクが壊れているか、ファイルがコンテナから作成されたイメージにのみ存在しているようです。

答えて

0

問題は、/ORCLがデータボリュームであることです。コミット操作には、ボリューム内のファイルは含まれません。詳細についてはcommit documentationを確認することができます。

したがって、新しいインスタンスを開始すると、何らかの形でログファイルが参照されていて、まだ作成されていないように見えます。コミットされたコンテナに存在する '/ ORCL'のファイルが新しいインスタンスに存在しないため、現在のコンテナは矛盾した状態です。

新しいマシンで新しいインスタンスを実行している場合は、古いボリュームを新しいマシンに移行する必要があります。あなたはdocker inspect -f '{{ .Mounts }}' <old-container-name>を実行して、古い容器の容積を見つけ、そしてHow to port data-only volumes from one host to another?

に指定されている同じマシン上で新しいインスタンスを実行している場合は、移行、単に使用して、古いボリュームをマウントすることができます<volume-name-or-id>:/ORCL

一般的には、ベストプラクティスとして、コンテナの同一インスタンスを取得するためにコミットコマンドに頼るべきではありません。むしろ、基本イメージを拡張するDockerFileを構築し、新しいインスタンスにコピーするのに必要なファイルのみを選択してカスタマイズを追加します。

関連する問題