5

Docker kullanarak bir ELK yığını çalıştırmayı deniyorum. docker-compose kullanarak, benim için yapılandırmayı zaten kurmuş olan docker-elk'u buldum.Konteyner yazılabilir ana bilgisayar dizini nasıl oluşturulur?

onun yerine bir kabın ana makinede elasticsearch veri depolamak istiyorum. Ben docker-compose up çalıştırdığınızda alıyorum, ancak

elasticsearch: 
    image: elasticsearch:latest 
    command: elasticsearch -Des.network.host=0.0.0.0 
    ports: 
    - "9200" 
    - "9300" 
    volumes: 
    - ../../env/elasticsearch:/usr/share/elasticsearch/data 

:

$ docker-compose up 
Starting dev_elasticsearch_1 
Starting dev_logstash_1 
Starting dev_kibana_1 
Attaching to dev_elasticsearch_1, dev_logstash_1, dev_kibana_1 
kibana_1  | Stalling for Elasticsearch 
elasticsearch_1 | [2016-03-09 00:23:35,193][WARN ][bootstrap    ] unable to install syscall filter: seccomp unavailable: your kernel is buggy and you should upgrade 
elasticsearch_1 | Exception in thread "main" java.lang.IllegalStateException: Unable to access 'path.data' (/usr/share/elasticsearch/data/elasticsearch) 
elasticsearch_1 | Likely root cause: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/elasticsearch 
elasticsearch_1 | at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84) 
elasticsearch_1 | at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102) 
elasticsearch_1 | at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107) 
... etc ... 

../../env baktığınızda, elasticsearch dizini liman işçisi-geyiğin README başına gelince, ben docker-compose.yml bir volumes çizgi 'ın elasticsearch bölümüne eklendi gerçekten yaratıldı, ama boştu. ../../env/elasticsearch/elasticsearch oluşturursam /usr/share/elasticsearch/data/elasticsearch/nodes için bir erişim hatası alıyorum. /nodes yaratıyorsam, /nodes/0, vb için bir hata alıyorum.

Kısacası, kapsayıcının dizin üzerinde yazma izinleri olmadığı anlaşılıyor.

Yazma izinlerini nasıl alabilirim? chmod a+wx ../../env/elasticsearch'u denedim ve sonra bir sonraki dizini oluşturmayı başardı, ancak bu dizinin izni drwxr-xr-x'a sahip ve yeniden takılıyor.

Bunu root olarak çalıştırmayı düşünmekten hoşlanmıyorum. Eğer hacimleri veya hacim kaplar kullanmak için bekliyor çünkü

+0

liman işçisi-oluşturma çalışma --rm elasticsearch, stat -c "% U% G"/usr/share/elasticsearch/veri 'çıktısı nedir (keresinde with apache for Magento. Böyle bir şey yapmak zorunda) '? – kojiro

+0

@kojiro: “UNKNOWN personelinin – Claudiu

cevap

2

Docker kendi tabanı görüntülerde bu şeyler hakkında endişe eğilimi yoktur. Ana bilgisayara montaj, ikinci sınıf desteği alır. Ancak, dizinin sahibi olan UID sıfır olmadığı sürece (ve bu bizim yorum alışverişimize dayanmıyor gibi görünüyorsa), elasticsearch'ü zaten dizinin sahibi olan kullanıcı olarak kullanmaktan kurtulabilmelisiniz. Elasticsearch kullanıcısını kapsayıcıdan kaldırıp UID'yi belirterek yeniden eklemeyi deneyebilirsiniz. en iyi bahis özel konteyner inşa etmek olurdu böylece

Sen girişnoktası anda bunu yapmak gerekir. Bu içeriği ile my-entrypoint adlı bir dosya oluşturun:

#!/bin/bash 

# Allow running arbitrary one-off commands 
[[ $1 && $1 != elasticsearch ]] && exec "[email protected]" 
# Otherwise, fix perms and then delegate the rest to vanilla 
target_uid=$(stat -c %u /usr/share/elasticsearch/data) 
userdel elasticsearch 
useradd -u "$target_uid" elasticsearch 
. /docker-entrypoint "[email protected]" 

çalıştırılabilir olduğundan emin olun.

FROM elasticsearch 
COPY my-entrypoint/
ENTRYPOINT ["/my-entrypoint"] 

Ve nihayet liman işçisi-compose.yml dosyasını güncellemek: Sonra bu içeriklerle bir Dockerfile oluşturmak bunu Değişikliklerinizden bir elasticsearch konteyner inşa etmeliyiz docker-compose up çalıştırdığınızda Şimdi

elasticsearch: 
    build: . 
    command: elasticsearch -Des.network.host=0.0.0.0 
    ports: 
    - "9200" 
    - "9300" 
    volumes: 
    - ../../env/elasticsearch:/usr/share/elasticsearch/data 

.

+0

Ahh ilgisini çekiyorum! Burada yazdıklarını denedim ama işe yaramadı ... ilk önce '/ docker-entrypoint.sh', '/ docker-entrypoint' değil, ama yine de işe yaramadı. Yine de, ilk iki cümlenize dayanarak hayatımı kolaylaştırmak ve sadece adlandırılmış birimleri kullanmama karar verdim. – Claudiu