2015-12-23 16 views
5

Sto eseguendo elasticsearch da un contenitore di finestra mobile.Come copiare il file nel contenitore mobile arrestato

Durante la configurazione di elasticsearch per ssl e shield il mio file elasticsearch.yml ha ottenuto l'accesso illegale, ad esempio TAB anziché space.
Ora il mio contenitore finestra mobile non si sta avviando e dando il seguente errore:

{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 

Come posso modificare elasticsearch.yml o sostituirla senza perdere i dati o sostituire il file elasticsearch.yml nel mio contenitore esistente?

risposta

0

replace it without losing data

Idealmente, tali dati devono essere memorizzati nel percorso montato da contenitori di volume dati separati (which do not run, they are just created). In questo modo, il tuo container principale (quello elasticsearch) può bloccarsi e essere sostituito a piacimento.
In questa configurazione (montaggio dei dati dai contenitori del volume), è possibile ricostruire l'immagine elasticsearch con il nuovo file di configurazione e riprendere da lì.

nella configurazione corrente, se tali dati non sono in un volume dichiarato dal vostro Dockerfile, cosa si può fare è:

  • [docker commit <stoppped_container_id>][1] newimage
  • fare un Dockerfile utilizzando tale newimage, e copiare la configurazione fissa file
  • eseguendo il contenitore da quella nuova immagine.
+0

grazie per la vostra risposta. –

+0

se [docker commit ] [1] newimage verranno copiati anche i miei dati elasticsearch. –

+0

@AmitJamwal l'intero stato di quel contenitore, con tutti i suoi dati, verrà congelato in una nuova immagine. Quindi sì. Ma se può dipendere anche da come è stato eseguito quel contenitore (qual era la sintassi esatta della 'finestra mobile? ') – VonC

2

Ci sono diversi casi:

  1. Nel contenitore, il file elasticsearch.yml risiede in un dati del volume directory

directory dei dati del volume è una speciale data storage backend per contenitori Docker, che Si chiama vfs back-end. Le directory sono essenzialmente directory normali mappate nel file system host, pertanto non forniscono alcuna funzionalità di copia su scrittura. Principalmente le directory mappate si trovano a /var/lib/dockers/vfs/dir/{container_id}, ma questo è configurabile. Per essere sicuri, è possibile utilizzare docker inspect {container_name} per controllare la posizione:

$> docker inspect my_container 

..... (omitted output) 

"Volumes": { 
"/datadir": "/var/lib/docker/vfs/dir/b2479214c25cd39c901c3211ed14cb9668eef822a125ca85de81425d53c9ccee" 
}, 

Come si può vedere, /datadir, che è una directory di dati di volume nel contenitore, viene mappata /var/lib/docker/vfs/dir/b2479214c25cd39c901c3211ed14cb9668eef822a125ca85de81425d53c9ccee del file system host. In tali circostanze, la risposta alla tua domanda è abbastanza semplice: basta copiarli come file normali nella directory host mappata.

  1. La directory nel contenitore non è la directory dei dati del volume.

Poiché Docker può utilizzare più back-end di archiviazione per le directory non di volume, non esiste una risposta semplice per la domanda.

Se ti è capitato di utilizzare AUFS come back-end, il file system del contenitore viene montato sul file system host, che è in qualche modo simile al caso vfs. È possibile individuare la directory mappata nel file system host e accedere ai file lì.Per informazioni dettagliate su AUFS in Docker, fare riferimento a Docker and AUFS in practice.

Se si utilizzano altri backend, ad es. devicemapper, o btrfs, immagino che non ci sia un modo semplice per accedere ai file contenitore dall'host. Forse puoi provare il metodo di @VonC.

0

Le schede non sono consentite nel file YML. Puoi modificarlo con qualsiasi editor nano o vim o vi.

La sostituzione o la modifica del file elasticsearch.yml non comporta la perdita di dati.

Le immagini Docker vengono ridotte al minimo indispensabile, quindi non è installato alcun editor con il container spedito. Ecco perché è necessario installarlo manualmente.

docker exec -it <container> bash 

ed eseguire:

apt-get update 
apt-get install vim 

o utilizzare il seguente Dockerfile:

DA confluenti/postgres-bw: 0,1

RUN ["apt-get", "update"] 
RUN ["apt-get", "install", "-y", "vim"] 

Per ulteriori How to edit file after I shell to a docker container?

+0

Come la domanda descrive, il contenitore finestra mobile non si avvia a causa di alcuni errori nel file elasticsearch.yml. Quindi immagino che il tuo comando 'docker exec -it bash' non funzionerà qui. – Zephyre

3

È può copia i file fuori e poi di nuovo in un contenitore (anche quando il contenitore è fermo) con il docker cp $cont_name:/path/in/container /path/on/host da copiare e quindi docker cp /path/on/host $cont_name:/path/in/container.

+0

La copia dall'host al contenitore funziona solo dal 1.8 in poi. – jjmontes

+0

Questa è la soluzione migliore per le versioni recenti della finestra mobile. – Nandana

Problemi correlati