DockerfileでRUN文をデバッグしようとしているときに、出力をバインドされたボリューム(./mongo/log
)のファイルにリダイレクトしようとしました。Docker:RUN touchでファイルが作成されない
驚いたことに私は、演算子(>>
、>
)リダイレクション/添付を使用してファイルにRUNコマンドを使って、またはパイプに別のコマンドの出力をファイルを作成することができませんでした。しかし、私は実行中のコンテナにdocker exec -ti mycontainer /bin/sh
でログインしてそこからコマンドを発行することで、上記のタスクを実行することができました。
この現象はなぜ発生しますか? Dockerfile/redirect出力のファイルを、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からの抜粋:ここ
は私Dockerfileある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/を参照してください。それはうまく機能するように設計されています。あなたはそれを別の方法で動作させたいと思うようです。ドッカーがキャッシュを使用しないようにビルドに指示することは可能ですが(上記のリンクで習得できるように、 '--no-cache = true'を指定)、Dockerfileを作成して活用する方法を見直すことをお勧めしますキャッシング機能 –
クールな読書! Dockerfileを更新しましょう。私の素早い読書から、それは私の問題を解決するようではありませんか? –
@Phillipe - 私が言及したパラメータは問題を解決すべきです - キャッシングを無効にするので、 "touch"はすべての単一ビルドで実行されます。しかし、キャッシュを無効にすることなく目標を達成できる他の方法があるかもしれません... –