我正在尝试在数字海洋液滴上调试 docker 构建,但我似乎无法访问任何日志。
当我运行构建命令时,它返回退出代码 137。这是我的构建命令:
docker build --build-arg env=staging -t name:tag .
我知道这与内存不足有关,但我想看看是否可以优化图像,而不仅仅是增加液滴上的 RAM。(有点遵循本指南)
我可以通过运行docker ps -a
找到退出的容器,但是当我尝试通过运行docker logs <CONTAINTER_ID>
访问日志时,出现以下错误:
Error response from daemon: configured logging driver does not support reading
因此,我尝试使用以下代码将daemon.json
文件添加到/etc/docker
来配置日志记录驱动程序:
{
"log-driver": "json-file"
}
当我检查运行docker info --format '{{.LoggingDriver}}'
时,我得到了json-file
- 所以据我所知,这是当前的默认日志记录驱动程序。
但是当我尝试再次构建映像时(它不起作用,按预期出现 137 错误),当我尝试访问日志时仍然收到相同的错误:
Error response from daemon: configured logging driver does not support reading
当我尝试通过运行以下命令检查容器正在使用的日志记录驱动程序时:docker inspect -f '{{.HostConfig.LogConfig.Type}}' 3016507bd1dc
我得到了none
。
有没有人知道我缺少什么或我如何获取失败构建的日志?
--- dockerfile ---
具有 Angular 客户端的节点应用程序
FROM node:11.14
ARG env
ENV NODE_ENV $env
# Create app directory
WORKDIR /usr/src/app
# Install app dependencies
COPY package*.json ./
COPY ./client/ ./client/
RUN npm install
WORKDIR /usr/src/app/client
RUN npm install &&
npm install --only=dev &&
npm install -g @angular/cli --unsafe &&
npm rebuild node-sass &&
ng build --configuration=$env
WORKDIR /usr/src/app
# Bundle app source
COPY . .
EXPOSE 3040
CMD [ "npm", "start" ]
--- 詹金斯文件---
pipeline {
agent any
stages {
stage('clean') {
steps {
sh 'docker system prune -a -f || true'
}
}
stage('build staging') {
when {
branch 'dev'
}
steps {
sh '''docker build --build-arg env=staging -t NAME:stage .
docker stop NAME-stage-c && docker rm NAME-stage-c || true
docker run -d -p 3041:3040 --name NAME-stage-c NAME:stage
'''
}
}
stage('cleanup') {
steps {
sh 'docker system prune -a -f || true'
}
}
}
}
最有可能的是,Docker甚至在能够分配日志记录驱动程序之前就进入了OOM。在任何情况下,查看日志都不是调试构建的方法。Docker 在构建过程中打印消息,这就是您应该使用的。 最重要的是,你不应该建立在液滴上。应在本地生成,推送到注册表并仅使用快捷批处理来运行容器。 但是,您可以发布您的 Dockerfile,我可以告诉您它是否仍然可以优化。
希望这能更清楚。