Docker 中的 Gitlab-runner Docker - docker build 无法看到 Dockerfile

问题描述 投票:0回答:1

Gitlab-runner 是使用以下 docker-compose 创建的:

version: '3.6'
services:
  gitlab-runner:
    container_name: gitlab-runner
    image: gitlab/gitlab-runner:v16.6.1
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /configs/gitlab-runner:/etc/gitlab-runner

我的 gitlab-runner config.toml

concurrent = 1
check_interval = 0
shutdown_timeout = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "6f86bc827c67"
  url = "https://gitlab.com/"
  id = 30523766
  token = ""
  token_obtained_at = 2023-12-14T14:53:59Z
  token_expires_at = 0001-01-01T00:00:00Z
  executor = "docker"
  [runners.cache]
    MaxUploadedArchiveSize = 0
  [runners.docker]
    tls_verify = false
    image = "docker:24.0.5"
    privileged = true
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/certs/client", "/cache"]
    shm_size = 0
    network_mtu = 0

我的 .gitlab-ci.yml 文件:

stages:
  - publish
  - deploy
image: docker:24.0.5

services:
  - name: docker:24.0.5-dind
variables:
  TAG_LATEST: $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:latest
  TAG_COMMIT: $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:$CI_COMMIT_SHORT_SHA
  DOCKER_TLS_CERTDIR: "/certs"

publish:
  stage: publish
  script:
    - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
    - ls -la
    - pwd
    - docker-compose build
    - docker-compose push
  only:
    - backend_test

deploy:
  stage: deploy
  script:
    - apk add --update --no-cache openssh
    - chmod og= $ID_RSA
    - eval $(ssh-agent -s)
    - ssh-add $ID_RSA
    - printf "TAG_LATEST=${TAG_LATEST}\nTAG_COMMIT=${TAG_COMMIT}\nSECRET_KEY=${SECRET_KEY}\nDATABASE_NAME=${TEST_DATABASE_NAME}\nDATABASE_USER=${TEST_DATABASE_USER}\nDATABASE_PASSWORD=${TEST_DATABASE_PASSWORD}\nDATABASE_HOST=${TEST_DATABASE_HOST}\nDATABASE_PORT=${TEST_DATABASE_PORT}\nGOOGLE_CLIENT_ID=${GOOGLE_CLIENT_ID}\nGOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET}" > .env
    - scp -i $ID_RSA -o StrictHostKeyChecking=no -P $SERVER_PORT -r .env docker-compose.yml $SERVER_USER@$SERVER_IP:~/calendar/test/backend/
    - ssh -i $ID_RSA -o StrictHostKeyChecking=no -p $SERVER_PORT $SERVER_USER@$SERVER_IP "docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY"
    - ssh -i $ID_RSA -o StrictHostKeyChecking=no -p $SERVER_PORT $SERVER_USER@$SERVER_IP "cd ~/calendar/test/backend/ && docker-compose down --remove-orphans && export $(grep -v '^#' .env | xargs) && docker-compose up -d && rm .env"
  environment:
    name: production
    url: https://$SERVER_IP/
  only:
    - backend_test

这是包括我的错误的日志:

Running with gitlab-runner 16.6.1 (f5da3c5a)
  on 6f86bc827c67 RDq11xbw, system ID: r_dLhDEhelPT3t
Preparing the "docker" executor 00:08
Using Docker executor with image docker:24.0.5 ...
Starting service docker:24.0.5-dind ...
Pulling docker image docker:24.0.5-dind ...
Using docker image sha256:7015f2c475d511a251955877c2862016a4042512ba625ed905e69202f87e1a21 for docker:24.0.5-dind with digest docker@sha256:3c6e4dca7a63c9a32a4e00da40461ce067f255987ccc9721cf18ffa087bcd1ef ...
Waiting for services to be up and running (timeout 30 seconds)...
Pulling docker image docker:24.0.5 ...
Using docker image sha256:7015f2c475d511a251955877c2862016a4042512ba625ed905e69202f87e1a21 for docker:24.0.5 with digest docker@sha256:3c6e4dca7a63c9a32a4e00da40461ce067f255987ccc9721cf18ffa087bcd1ef ...
Preparing environment 00:00
Running on runner-rdq11xbw-project-36740136-concurrent-0 via 6f86bc827c67...
Getting source from Git repository 00:02
Fetching changes with git depth set to 20...
Reinitialized existing Git repository in /builds/kleikkowo/calendar/.git/
Checking out ad7fd968 as detached HEAD (ref is backend_test)...
Skipping Git submodules setup
Executing "step_script" stage of the job script 00:02
Using docker image sha256:7015f2c475d511a251955877c2862016a4042512ba625ed905e69202f87e1a21 for docker:24.0.5 with digest docker@sha256:3c6e4dca7a63c9a32a4e00da40461ce067f255987ccc9721cf18ffa087bcd1ef ...
$ docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
$ ls -la
total 52
drwxrwxrwx    4 root     root          4096 Dec 14 16:45 .
drwxrwxrwx    4 root     root          4096 Dec 14 14:54 ..
drwxrwxrwx    6 root     root          4096 Dec 14 16:45 .git
-rw-rw-rw-    1 root     root          2974 Dec 14 15:12 .gitignore
-rw-rw-rw-    1 root     root          1705 Dec 14 16:43 .gitlab-ci.yml
-rw-rw-rw-    1 root     root          2208 Dec 14 14:54 .pre-commit-config.yaml
-rw-rw-rw-    1 root     root           756 Dec 14 15:12 Dockerfile
-rw-rw-rw-    1 root     root           102 Dec 14 15:12 README.md
drwxrwxrwx    5 root     root          4096 Dec 14 15:12 calendars
-rw-rw-rw-    1 root     root          1489 Dec 14 16:45 docker-compose.yml
-rw-rw-rw-    1 root     root           837 Dec 14 15:12 pyproject.toml
-rw-rw-rw-    1 root     root            53 Dec 14 15:12 pytest.ini
-rwxrwxrwx    1 root     root            31 Dec 14 15:12 start-backend.sh
$ pwd
/builds/kleikkowo/calendar
$ docker-compose build --build-arg build_context=/builds/kleikkowo/calendar
unable to prepare context: path "/builds/kleikkowo/calendar/. -f Dockerfile" not found
Cleaning up project directory and file based variables 00:00
ERROR: Job failed: exit code 17

我的 docker-compose 文件:

---
version: "3.6"

services:
  calendar_backend_test:
    image: $TAG_COMMIT
    build: . -f Dockerfile
    restart: always
    environment:
      - DATABASE_HOST=$DATABASE_HOST
      - DATABASE_NAME=$DATABASE_NAME
      - DATABASE_PASSWORD=$DATABASE_PASSWORD
      - DATABASE_PORT=$DATABASE_PORT
      - DATABASE_USER=$DATABASE_USER
      - SECRET_KEY=$SECRET_KEY
      - GOOGLE_CLIENT_ID=$GOOGLE_CLIENT_ID
      - GOOGLE_CLIENT_SECRET=$GOOGLE_CLIENT_SECRET
    security_opt:
      - no-new-privileges:true
    container_name: calendar_backend_test
    networks:
      - traefik_default
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.calendar_backend_test.entrypoints=webs"
      - "traefik.http.routers.calendar_backend_test.rule=Host(`be.gymsey.com`)"
      - "traefik.http.routers.calendar_backend_test.tls.certresolver=letsencrypt"
      - "traefik.http.services.calendar_backend_test.loadbalancer.server.port=8000"
      - "traefik.http.services.calendar_backend_test.loadbalancer.server.scheme=http"
  postgre_local:
    image: postgres:14.1-alpine
    restart: always
    environment:
      - POSTGRES_DB=$DATABASE_NAME
      - POSTGRES_PASSWORD=$DATABASE_PASSWORD
      - POSTGRES_USER=$DATABASE_USER
    security_opt:
      - no-new-privileges:true
    container_name: $DATABASE_HOST
    networks:
      - traefik_default
    volumes:
      - db:/var/lib/postgresql/data
volumes:
  db:
    driver: local

networks:
  traefik_default:
    external: true

我不明白为什么我的命令构建只在 gitlab-runner 上看不到该文件,当我在本地执行此操作时,一切都很好,而且我知道它已连接到 gitlab-runner,因为就像几个月前使用超级旧的 gitlab 一样-runner 它确实工作正常,并且在本地也可以正常工作。我在这里缺少什么?

我期待脚本看到 Dockerfile

docker gitlab-ci gitlab-ci-runner
1个回答
0
投票

撰写文件中的

build:
参数不正确。
build: . -f Dockerfile
无效。当这个键是一个字符串时,它认为整个字符串是上下文路径。

如果您想提供 dockerfile 作为参数,您应该使用

Dockerfile:
键来提供它。

© www.soinside.com 2019 - 2024. All rights reserved.