如何将文件复制到停止的docker容器

Ami*_*wal 14 linux elasticsearch docker

我正在docker容器中运行elasticsearch.

在为ssl和shield配置elasticsearch时,我的elasticsearch.yml文件被非法输入,TAB而不是a space.
现在我的docker容器没有启动并出现以下错误:

{1.4.4}: Setup Failed ...
- SettingsException[Failed to load settings from [file:/elasticsearch/config/elasticsearch.yml]]
         IOException[Tabs are illegal in YAML.  Did you mean to use whitespace character instead?]
 org.elasticsearch.common.settings.SettingsException: Failed to load
 settings from [file:/elasticsearch/config/elasticsearch.yml]
         at org.elasticsearch.common.settings.ImmutableSettings$Builder.loadFromStream(ImmutableSettings.java:947)
         at org.elasticsearch.common.settings.ImmutableSettings$Builder.loadFromUrl(ImmutableSettings.java:931)
         at org.elasticsearch.node.internal.InternalSettingsPreparer.prepareSettings(InternalSettingsPreparer.java:77)
         at org.elasticsearch.bootstrap.Bootstrap.initialSettings(Bootstrap.java:106)
         at org.elasticsearch.bootstrap.Bootstrap.main(Bootstrap.java:177)
         at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:32)
 Caused by: java.io.IOException: Tabs are illegal in YAML.  Did you
 mean to use whitespace character instead?
         at org.elasticsearch.common.settings.loader.YamlSettingsLoader.load(YamlSettingsLoader.java:44)
         at org.elasticsearch.common.settings.ImmutableSettings$Builder.loadFromStream(ImmutableSettings.java:944)
         ... 5 more
Run Code Online (Sandbox Code Playgroud)

如何elasticsearch.yml在不丢失数据或替换elasticsearch.yml现有容器中的文件的情况下编辑或替换它?

BMi*_*tch 20

您可以将文件复制出来,然后将其复制回容器(即使容器已停止)docker cp $cont_name:/path/in/container /path/on/host,然后复制出来然后复制出来docker cp /path/on/host $cont_name:/path/in/container.


Von*_*onC 0

替换它而不丢失数据

理想情况下,这些数据应存储在从单独的数据卷容器安装的路径中(这些容器不运行,它们只是创建的)。这样,您的主服务容器(那个elasticsearch)就可以崩溃并随意更换。
在该配置中(从卷容器挂载数据),您可以elasticsearch使用新的配置文件重建映像,然后从那里恢复。

在您当前的配置中,如果这些数据不在 Dockerfile 声明的 VOLUME 中,您可以执行以下操作:

  • [docker commit <stoppped_container_id>][1] newimage
  • 使用该新映像创建一个 Dockerfile,然后复制固定的配置文件
  • 从该新映像运行您的容器。