韩皓 2021-06-29 11:09 采纳率: 0%
浏览 20

docker设置volumes将yarn的全局缓存保存到数据卷中问题

gitlab-runner中使用docker模式,设置volumes将yarn的全局缓存保存到数据卷中问题

### 问题描述
在设置gitlab-runner中模式选为docker

### 问题出现的平台版本

```
yarn -v
v1.22.5
```

```
node -v
v16.3.0
```

```
docker -v
Docker version 20.10.7, build f0df350
```

```
gitlab-runner -v

Version:      13.12.0
Git revision: 7a6612da
Git branch:   13-12-stable
GO version:   go1.16.3
Built:        2021-05-20T23:59:54+01:00
OS/Arch:      darwin/amd64
```

### 相关代码
这个是我的gitlab-runner config
/usr/local/share/.cache/为镜像中yarn的全局缓存目录
```
concurrent = 1
check_interval = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "xxxx"
  url = "http://xxxxx"
  token = "xxxxxx"
  executor = "docker"
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
  [runners.docker]
    tls_verify = false
    image = "node"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/Users/xxxx/home/cache:/usr/local/share/.cache/"]   

```
这个是我.gitlab-ci.yml文件

```
image: node

stages:
  - build

variables:
  GIT_STRATEGY: clone

build:
  stage: build
  image: node
  script: 
    - yarn install
  only:
    - feature/1.0.0
  tags:
    - fe
  timeout: 10m


```


### 你期待的结果是什么?实际看到的错误信息又是什么?
在ci执行到script时,yarn会显示网络错误,我确保我挂靠到volumes的文件权限为777
```
$ yarn install --har
yarn install v1.22.5
[1/5] Resolving packages...
[2/5] Fetching packages...
info There appears to be trouble with your network connection. Retrying...
info There appears to be trouble with your network connection. Retrying...
```
我期待得到的结果是我的依赖安装完成。

  • 写回答

2条回答 默认 最新

  • woc ??? 2024-03-06 15:56
    关注

    你的配置看起来是正确的,但是在挂载数据卷时可能会遇到权限问题。为确保权限正确,可以使用 Docker 容器内的用户与主机用户匹配。

    以下是一种解决方法,你可以在 Dockerfile 中设置容器内的用户和组,确保其 UID 和 GID 与主机用户匹配:

    FROM node
    
    # 添加一个新的用户,并设置 UID 和 GID 与主机用户匹配
    RUN groupadd -g 1000 myuser && useradd -u 1000 -g 1000 -m -s /bin/bash myuser
    
    # 切换到新用户
    USER myuser
    
    # 设置工作目录
    WORKDIR /usr/src/app
    
    # ... (其余 Dockerfile 配置)
    

    然后,你可以在 gitlab-runner 的配置文件中将 volumes 设置为 /usr/src/app

    volumes = ["/Users/xxxx/home/cache:/usr/src/app/"]
    

    这样可以确保在容器内使用的用户与主机用户匹配,避免挂载数据卷时产生权限问题。

    另外,确保主机路径 /Users/xxxx/home/cache 的权限也是可写的。你可以尝试运行以下命令,以确保主机上的权限是正确的:

    chmod -R 777 /Users/xxxx/home/cache
    

    然后再次运行 GitLab CI 作业,看看是否解决了网络错误问题。

    评论

报告相同问题?

悬赏问题

  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘