#docker #containers
Вопрос:
я создаю образ докера, используя следующий файл докера
FROM java:8-jdk
ENV DOCKER_HOME /docker
ENV CRAWLER_HOME /docker/crawler
RUN groupadd crawler amp;amp; useradd -g crawler crawler
RUN mkdir -p ${DOCKER_HOME}
RUN mkdir -p ${CRAWLER_HOME}
COPY ./ ${CRAWLER_HOME}
RUN ls -la ${CRAWLER_HOME}/*
RUN chown -R crawler:crawler ${DOCKER_HOME} amp;amp; chmod -R 755 ${DOCKER_HOME}
WORKDIR $CRAWLER_HOME
ENTRYPOINT [ "/docker/crawler/docker/Entrypoint.sh" ]
когда я запускаю изображение без опции-v, оно отлично работает(docker запускает sampleimage:1.0). Но когда я запускаю с-v, это приводит к следующей ошибке
docker run -v ~/docker:/docker sampleimage:1.0
docker: Error response from daemon: OCI runtime create failed: container_linux.go:367:
starting container process caused: exec: "/docker/crawler/docker/Entrypoint.sh": stat
/docker/crawler/docker/Entrypoint.sh: no such file or directory: unknown.
ERRO[0000] error waiting for container: context canceled
при создании изображения я попытался перечислить файл в CRAWLER_HOME и Entrypoint.sh файл присутствует. Не удалось выяснить, почему он не выдает такой файл или каталог во время работы.
Комментарии:
1.
~/docker/crawler/docker/Entrypoint.sh
Существует ли файл на вашем хосте? Если да, то какова первая строка?2. Зачем вы увеличиваете громкость? Есть ли какая-то конкретная причина для этого?
3. @BMitch ~/docker/crawler/docker/Entrypoint.sh отсутствует в хосте, но присутствует в изображении. содержимое плитки Entrypoint.sh #!/bin/sh set -x set -e set — /docker/crawler/docker/start.sh «$@» exec «$@»
4. @Hisham я хочу предварительно просмотреть журналы локально на главной машине.
Ответ №1:
/docker/crawler/docker/Entrypoint.sh не присутствует в хосте, но присутствует в изображении.
Монтирование тома с использованием тех же методов ядра, которые используются для монтирования файловой системы в Linux в других местах. При монтировании поверх каталога, содержащего содержимое, это содержимое не отображается, пока существует монтирование. Весь доступ к каталогу осуществляется через смонтированную файловую систему. Это означает, что вы не объединяете то, что на изображении, с тем, что находится на хосте, вместо этого вы будете видеть только то, что находится в томе.
Полуисключением из этого является монтирование именованных томов. В этом случае именованное монтирование инициализируется при первом использовании с содержимым образа. Затем, продвигаясь вперед, это именованное монтирование действует так же, затеняя содержимое образа, хотя это не так очевидно, поскольку файлы с образа были скопированы в том. Обратите внимание, что эта инициализация происходит только тогда, когда именованный том пуст/новый и контейнер создан, и не запускается при каждом использовании тома, поэтому вы не будете автоматически вносить изменения в изображение при последующем запуске.
Стандартный совет состоит в том, чтобы отделить ваши данные от вашего приложения, разместить их в отдельных папках. Затем смонтируйте том для данных и включите двоичные файлы/сценарии приложений в образ.