Я пытаюсь запустить контейнер ElasticSearch на вновь созданной виртуальной машине с установленным Docker 1.12.5, но встретить исключение Permission Denied
. Меня озадачивает то, что все работает отлично в старой VM моей, с Docker 1.12.2. Что мне не хватает?Разрешение запрещено при запуске контейнера (докер 1.12.5)
Исключение:
Exception in thread "main" SettingsException[Failed to open stream for url [/usr/share/elasticsearch/config/elasticsearch.yml]]; nested: AccessDeniedException[/usr/share/elasticsearch/config/elasticsearch.yml];
Likely root cause: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/config/elasticsearch.yml
at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
at sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:214)
at java.nio.file.Files.newByteChannel(Files.java:361)
at java.nio.file.Files.newByteChannel(Files.java:407)
at java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:384)
at java.nio.file.Files.newInputStream(Files.java:152)
at org.elasticsearch.common.settings.Settings$Builder.loadFromPath(Settings.java:1067)
at org.elasticsearch.node.internal.InternalSettingsPreparer.prepareEnvironment(InternalSettingsPreparer.java:88)
at org.elasticsearch.common.cli.CliTool.<init>(CliTool.java:107)
at org.elasticsearch.common.cli.CliTool.<init>(CliTool.java:100)
at org.elasticsearch.bootstrap.BootstrapCLIParser.<init>(BootstrapCLIParser.java:48)
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:242)
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:35)
Система:
- Windows 10, с VirtualBox установлен,
- в Xubuntu 16.04 изображение, с общей папкой хозяина, содержащей Dockerfile и файл конфигурации elasticsearch.yml.
докер файл:
FROM openjdk:8-jre
ENV VERSION 2.4.1
RUN groupadd -r elasticsearch && useradd -r -g elasticsearch elasticsearch
RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys 46095ACC8548582C1A2699A9D27D666CD88E42B4
RUN set -x \
&& apt-get update && apt-get install -y --no-install-recommends apt-transport-https && rm -rf /var/lib/apt/lists/* \
&& echo 'deb http://packages.elasticsearch.org/elasticsearch/2.x/debian stable main' > /etc/apt/sources.list.d/elasticsearch.list
RUN set -x \
&& apt-get update \
&& apt-get install -y --no-install-recommends elasticsearch=$VERSION \
&& rm -rf /var/lib/apt/lists/*
ENV PATH /usr/share/elasticsearch/bin:$PATH
WORKDIR /usr/share/elasticsearch
RUN set -ex \
&& for path in \
./data \
./logs \
./config \
./config/scripts \
; do \
mkdir -p "$path"; \
chown -R elasticsearch:elasticsearch "$path"; \
done
COPY config ./config
VOLUME /usr/share/elasticsearch/data
VOLUME /usr/share/elasticsearch/logs
EXPOSE 9200 9300
USER elasticsearch
CMD elasticsearch
стороне Dockerfile, живет структура следующий файл:
- config
- elasticsearch.yml
Поскольку изображение работает на другом VM, я считаю его конфигурацию должно быть правильным. Я не думаю, что проблема исходит от ElasticSearch, так как у меня, похоже, есть другое изображение с той же проблемой (H2). Я начинаю уровень с Docker и Linux.
Спасибо. Настройка разрешений после работы копии. Не знаю, почему это сработало на моей предыдущей виртуальной машине, но сейчас я счастлив. Приветствия. – Elegie
Разрешения сопоставления из окон в unix всегда немного перепутаны. Единственный раз, когда вы можете доверять источнику, это когда это файловая система Linux, поэтому лучше всего просто установить, что вам нужно в файле докеров, чтобы он не поступил неправильно. – Matt