韩皓 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 oracle数据库备份表如何操作
  • ¥15 软件定义网络mininet和onos控制器问题
  • ¥15 微信小程序 用oss下载 aliyun-oss-sdk-6.18.0.min client报错
  • ¥15 ArcGIS批量裁剪
  • ¥15 labview程序设计
  • ¥15 为什么在配置Linux系统的时候执行脚本总是出现E: Failed to fetch http:L/cn.archive.ubuntu.com
  • ¥15 Cloudreve保存用户组存储空间大小时报错
  • ¥15 伪标签为什么不能作为弱监督语义分割的结果?
  • ¥15 编一个判断一个区间范围内的数字的个位数的立方和是否等于其本身的程序在输入第1组数据后卡住了(语言-c语言)
  • ¥15 Mac版Fiddler Everywhere4.0.1提示强制更新