Сбой сборки докера не имеет логов - «настроенный драйвер логов не поддерживает чтение» - PullRequest
1 голос
/ 21 апреля 2019

Я пытаюсь отладить сборку докера на дроплете Digital Ocean, но не могу получить доступ к каким-либо журналам.

Когда я запускаю команду сборки, она возвращает код завершения 137. Это моя команда сборки:

docker build --build-arg env=staging -t name:tag .

Я знаю, что это связано с нехваткой памяти, но вместопросто увеличивая объем оперативной памяти на капле, я хотел бы посмотреть, смогу ли я оптимизировать изображение.( В некотором роде, следуя этому руководству )

Я могу найти выход из контейнера, запустив 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"
}

Когда я проверяю run 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 --

Приложение Node с угловым клиентом

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" ]

--- jenkinsfile ---

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'
      }
    }
  }
}

1 Ответ

1 голос
/ 21 апреля 2019

Скорее всего, Docker входит в OOM даже до того, как сможет назначить драйвер регистрации.В любом случае просмотр журналов не является способом отладки сборки.Docker печатает сообщения по мере прохождения процесса сборки, и это то, что вы должны использовать.Самое главное, вы не должны строить на капле.Вы должны создать локально, нажать на реестр и использовать капли только для запуска контейнера.Однако вы можете опубликовать свой Dockerfile, и я скажу вам, можно ли его оптимизировать.

Надеюсь, это прояснит ситуацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...