Bitbucket Pipeline с docker -композицией: идентификатор контейнера 166535 не может быть сопоставлен с идентификатором хоста - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь использовать docker -компоновку внутри конвейера битбакета, чтобы создать несколько микросервисов и запустить их тестирование. Однако я получаю следующую ошибку:

Step 19/19 : COPY . .
Service 'app' failed to build: failed to copy files: failed to copy directory: Error processing tar file(exit status 1): Container ID 166535 cannot be mapped to a host ID

На данный момент мой docker -compose.yml выглядит следующим образом:

version: '2.3'
services:
  app:
    build:
      context: .
      target: dev
    ports:
      - "3030:3030"
    image: myapp:dev
    entrypoint: "/docker-entrypoint-dev.sh"
    command: [ "npm", "run", "watch" ]
    volumes:
      - .:/app/
      - /app/node_modules
    environment:
      NODE_ENV: development
      PORT: 3030
      DATABASE_URL: postgres://postgres:@postgres/mydb

и Мой Dockerfile выглядит следующим образом:

# ---- Base ----
#
FROM node:10-slim AS base
ENV PORT 80
ENV HOST 0.0.0.0
EXPOSE 80
WORKDIR /app
COPY ./scripts/docker-entrypoint-dev.sh /
RUN chmod +x /docker-entrypoint-dev.sh
COPY ./scripts/docker-entrypoint.sh /
RUN chmod +x /docker-entrypoint.sh
ENTRYPOINT ["/docker-entrypoint.sh"]
COPY package.json package-lock.json ./

# ---- Dependencies ----
#
FROM base as dependencies
RUN npm cache verify
RUN npm install --production=true
RUN cp -R node_modules node_modules_prod
RUN npm install --production=false

# ---- Development ----
#
FROM dependencies AS dev
ENV NODE_ENV development
COPY . .

# ---- Release ----
#
FROM dependencies AS release
ENV NODE_ENV production
COPY --from=dependencies /app/node_modules_prod ./node_modules
COPY . .
CMD ["npm", "start"]

И в моем bitbucket-pipelines.yml я определяю свой конвейер как:

image: node:10.15.3
pipelines:
  default:
    - step:
        name: 'install docker-compose, and run tests'
        script:
          - curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
          - chmod +x /usr/local/bin/docker-compose
          - docker-compose -v
          - docker-compose run app npm run test
          - echo 'tests done'
        services:
          - docker

Однако этот пример работает, когда Я пытаюсь использовать docker без docker -compose, определяя мой конвейер как:

pipelines:
  default:
    - step:
        name: 'install and run tests'
        script:
          - docker build -t myapp .
          - docker run --entrypoint="" myapp npm run test
          - echo 'done!'
        services:
          - postgres
          - docker

Я нашел эту проблему (https://jira.atlassian.com/browse/BCLOUD-17319) в сообществе atlassian, однако я мог не могу найти решение, чтобы исправить мой сломанный вариант использования. Есть предложения?

1 Ответ

0 голосов
/ 31 марта 2020

Я бы попробовал использовать образ с уже установленным docker -композицией вместо его установки во время конвейера.

image: node:10.15.3
pipelines:
  default:
    - step:
        name: 'run tests'
        script:
          - docker-compose -v
          - docker-compose run app npm run test
          - echo 'tests done'
        services:
          - docker

definitions:
    services:
        docker:
            image: docker/compose:1.25.4

попробуйте добавить его к bitbucket-pipelines.yml

если это не работает, переименуйте docker в customDocker в определении и в служебных разделах.

, если это тоже не работает, то, поскольку вам не нужен nodejs в конвейере напрямую, попробуйте использовать этот подход:

image: docker/compose:1.25.4
pipelines:
  default:
    - step:
        name: 'run tests'
        script:
          - docker-compose -v
          - docker-compose run app npm run test
          - echo 'tests done'
        services:
          - docker

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