При попытке отладки операторов RUN в моем файле Docker я попытался перенаправить вывод в файл в связанном томе (./mongo/log
).Docker: RUN touch не создает файл
К моему удивлению, мне не удалось создать файлы с помощью команды RUN или передать результат другой команды в файл с помощью операторов перенаправления/добавления (,). Однако я смог выполнить указанную задачу, выполнив вход в рабочий контейнер через docker exec -ti mycontainer /bin/sh
и выдав команду оттуда.
Почему такое поведение происходит? Как я могу дотронуться до файла в файле Dockerfile/redirect в файл или на консоль, из которой запускается Dockerfile?
Вот мой Dockerfile:
FROM mongo:3.4
#Installing NodeJS
RUN apt-get update && \
apt-get install -y curl && \
curl -sL https://deb.nodesource.com/setup_6.x | bash - && \
apt-get install -y nodejs
#Setting Up Mongo
WORKDIR /var/www/smq
COPY ./mongo-setup.js mongo-setup.js
##for testing
RUN touch /var/log/node.log &&/
node --help 2>&1 > /var/log/node.log
##this was the command to debug
#RUN node mongo-setup.js > /var/log/mongo-setup.log 2> /var/log/mongo-setup.error.log
Вот отрывок из моего Докер-compose.yml:
mongodb:
build:
context: ./
dockerfile: ./mongodb-dockerfile
container_name: smqmongodb
volumes:
- /var/lib/mongodb/data
- ./mongo/log/:/var/log/
- ../.config:/var/www/.config
Вы должны прочитать о промежуточных этапах кэширования: https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/. Он работает именно так, как он предназначен для работы - вы, похоже, хотите, чтобы он работал по-другому. Хотя можно сказать, что сборка docker не использует кеширование (с '--no-cache = true', как вы можете узнать в ссылке выше), я бы предложил вам рассмотреть способ создания файла Docker для охвата и использования возможности кэширования. –
Прохладный читать! Позвольте мне обновить файл Dockerfile. Из моего быстрого чтения это, похоже, не решает мою проблему, нет? –
@Phillipe - параметр, о котором я говорил *, должен * решить проблему - он отключит кеширование, поэтому «touch» будет выполняться на каждой отдельной сборке. Но могли бы быть и другие способы достижения ваших целей без необходимости отключать кеш ... –