在尝试调试Dockerfile中的RUN语句时,我尝试将输出重定向到绑定卷(./mongo/log)中的文件.
令我惊讶的是,我无法通过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
这里是我的docker-compose.yml的摘录:
mongodb: build: context: ./ dockerfile: ./mongodb-dockerfile container_name: smqmongodb volumes: - /var/lib/mongodb/data - ./mongo/log/:/var/log/ - ../.config:/var/www/.config
而不是RUN节点mongo-setup.js> /var/log/mongo-setup.log 2> /var/log/mongo-setup.error.log,在容器内,如果你只是说’RUN node mongo-setup.js’怎么办?
Docker建议使用docker日志.像这样:
docker logs container-name
为了完成您所追求的目标(请参阅mongo设置日志?),您可以拆分stdout&通过管道单独的流来容器的stderr:并将它们发送到文件:
me@host~$docker logs foo > stdout.log 2>stderr.log me@host~$cat stdout.log me@host~$cat stderr.log