gpt4 book ai didi

docker - 未创建 GitLab CI Docker WORKDIR

转载 作者:行者123 更新时间:2023-12-02 18:27:37 24 4
gpt4 key购买 nike

我正在尝试通过 GitLab CI 将我的 NodeJS 存储库部署到 DO droplet。我一直在关注 this guide 这样做。奇怪的是,部署管道似乎成功了,但是如果我通过 SSH 连接到盒子中,我可以看到应用程序没有运行,因为在 package.json 中找不到 /usr/src/app,这是我的 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。我的管道看起来执行得非常好,但是最后出现了这个符号链接(symbolic link)失败:

enter image description here

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

enter image description here

Docker 尚未创建 /usr/src/app

版本:
  • docker :19.03.1
  • docker 撰写:1.22.0

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

    编辑

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

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

    最佳答案

    您的 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

    关于docker - 未创建 GitLab CI Docker WORKDIR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57812615/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com