【问题标题】:GitLab CI Docker WORKDIR not being created未创建 GitLab CI Docker WORKDIR
【发布时间】:2020-01-08 18:39:04
【问题描述】:

我正在尝试通过 GitLab CI 将我的 NodeJS 存储库部署到 DO droplet。我一直在关注this guide 这样做。奇怪的是,部署管道似乎成功了,但是如果我通过 SSH 连接到盒子中,我可以看到应用程序没有运行,因为在 /usr/src/app 中找不到 package.json,这是我的 Dockerfile 中的 WORKDIR指向。

gitlab-ci.yml

cache:
  key: "${CI_BUILD_REF_NAME} node:latest"
  paths:
    - node_modules/
    - .yarn

stages:
  - build
  - release
  - deploy

build:
  stage: build
  image: node:latest
  script:
    - yarn
  artifacts:
    paths:
      - node_modules/

release:
  stage: release
  image: docker:latest
  only:
    - master
  services:
    - docker:dind
  variables:
    DOCKER_DRIVER: "overlay"
  before_script:
    - docker version
    - docker info
    - docker login -u ${CI_REGISTRY_USER} -p ${CI_BUILD_TOKEN} ${CI_REGISTRY}
  script:
    - docker build -t ${CI_REGISTRY}/${CI_PROJECT_PATH}:latest --pull .
    - docker push ${CI_REGISTRY}/${CI_PROJECT_PATH}:latest
  after_script:
    - docker logout ${CI_REGISTRY}

deploy:
  stage: deploy
  image: gitlab/dind:latest
  only:
    - master
  environment: production
  when: manual
  before_script:
    - mkdir -p ~/.ssh
    - echo "${DEPLOY_SERVER_PRIVATE_KEY}" | tr -d '\r' > ~/.ssh/id_rsa
    - chmod 600 ~/.ssh/id_rsa
    - eval "$(ssh-agent -s)"
    - ssh-add ~/.ssh/id_rsa
    - ssh-keyscan -H ${DEPLOYMENT_SERVER_IP} >> ~/.ssh/known_hosts
  script:
    - printf "DB_URL=${DB_URL}\nDB_NAME=${DB_NAME}\nPORT=3000" > .env
    - scp -r ./.env ./docker-compose.yml root@${DEPLOYMENT_SERVER_IP}:~/
    - ssh root@${DEPLOYMENT_SERVER_IP} "docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}; docker-compose rm -sf scraper; docker pull ${CI_REGISTRY}/${CI_PROJECT_PATH}:latest; docker-compose up -d"

Dockerfile

FROM node:10

WORKDIR /usr/src/app

COPY package.json ./
RUN yarn

COPY . .
EXPOSE 3000

CMD [ "yarn", "start" ]

docker-compose.yml

version: "3"
services:
  scraper:
    build: .
    image: registry.gitlab.com/arby-better/scraper:latest
    volumes:
      - .:/usr/src/app
      - /usr/src/app/node_modules
    ports:
      - 3000:3000
    environment:
      - NODE_ENV=production
    env_file:
      - .env

我正在为我的管道使用 GitLab Shared Runners。我的管道看起来执行得很好,但最后出现了这个符号链接失败:

...我认为这没什么好担心的。如果我 SSH 进入我的盒子并转到复制 docker compose 的位置并检查:

Docker 尚未创建 /usr/src/app。

版本:

  • 码头工人:19.03.1
  • Docker-compose:1.22.0

我的 DO 框是 Docker 1-click btw。任何帮助表示赞赏!

编辑

我已更改我的 Dockerfile 以尝试强制创建目录,因此在声明它为工作目录的行之前添加了 RUN mkdir -p /usr/src/app。这仍然不会创建目录...

当我查看容器状态'(docker-compose ps) 时,我可以看到容器处于退出状态并已退出,代码为 1 或 254...任何想法为什么?

【问题讨论】:

    标签: docker docker-compose gitlab-ci


    【解决方案1】:

    您的 compose 文件是为开发环境设计的,其中代码目录被替换为开发人员机器上代码的卷挂载。您在生产中没有此持久目录,也不应在生产中依赖映像之外的代码,从而违背将其复制到映像中的目的。

    version: "3"
    services:
      scraper:
        build: .
        image: registry.gitlab.com/arby-better/scraper:latest
        # Comment out or delete these lines, they do not belong in production
        #volumes:
        #  - .:/usr/src/app
        #  - /usr/src/app/node_modules
        ports:
          - 3000:3000
        environment:
          - NODE_ENV=production
        env_file:
          - .env
    

    【讨论】:

    • 非常感谢您的完美解释:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 2022-08-10
    相关资源
    最近更新 更多