起動できないdockerコンテナを修復する方法


起動できないdockerコンテナを修復する方法
背景:
テストサーバでdockerを使用してelasticsearchサービスクラスタを構築しましたが、esに中国語の分詞のプラグインをインストールする必要があるため、インストールの姿勢に問題があり、起動できませんでした.テスト開発用であり、コンテナにデータボリュームをマウントすることもないため、コンテナが閉じた後、ホストに関連するディレクトリはありません.またpluginsディレクトリ構造のため、esサービスが関連ファイルを見つけられず起動できません.
解決策は、cpコマンドを使用してpluginsディレクトリ全体をホストの下にコピーして変更し、cpをコンテナに戻すことです.
#  plugins  cp    
[root@study-01 ~]# docker cp es1:/usr/share/elasticsearch/plugins ./
...        ...
[root@study-01 ~]# docker cp ./plugins/ es1:/usr/share/elasticsearch/  # cp    
[root@study-01 ~]# docker start es1  #     

もう1つの解決策は、ミラーを作成し、この問題コンテナをdocker commitで新しいミラーにコミットし、docker run-itで新しいミラーに基づいて新しいコンテナを実行してプロファイルを変更(修復)することです.新しいコンテナを介して新しいミラーをコミットし、新しいミラーに基づいてコンテナを再起動します(最初のコンテナと同じ).この方法は実行可能であるが,問題はステップが多く,新しいミラーがコミットされ,後続のメンテナンスに複雑さが増すことである.
手順は次のとおりです.
#            
[root@study-01 ~]# docker commit  :
[root@study-01 ~]# docker rm    #          ,      

#         
[root@study-01 ~]# docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
old-es3                   first               bf1fdb9b3a2d        54 minutes ago      550 MB
old-es2                   first               4e1a92871782        55 minutes ago      550 MB
old-es1                   first               d1a485b8f5c0        55 minutes ago      551 MB

#           ,    ,      
[root@study-01 ~]# docker run -it --name fix-es1 old-es1:first /bin/bash

#      
[root@study-01 ~]# docker commit  :

#        
[root@study-01 ~]#  docker run -d --name es1 -p 9200:9200 -p 9300:9300 ok-es1:first