远程VM中Docker挂载文件变为空目录的问题求助
问题分析
当Docker绑定挂载文件时,如果源路径不存在,Docker会自动创建一个空目录作为挂载目标——这就是你在远程VM上看到空目录的核心原因:你的mock-config.yaml没有同步到目标VM的工作目录中。
以下是几种可行的解决方案:
1. 在CI/CD流程中提前同步配置文件到远程VM
在执行docker-compose up之前,先把本地的mock-config.yaml同步到远程VM的对应项目目录下。具体操作根据你使用的CI/CD工具调整:
- 若用GitHub Actions:在
run步骤中用scp上传文件,示例命令:scp ./mock-config.yaml your-user@remote-vm-ip:/path/to/your/project/ - 若用GitLab CI:借助
rsync或CI内置的文件传输能力,确保文件在docker-compose启动前已经存在于VM的工作目录。
2. 将配置内容直接嵌入docker-compose配置
不需要依赖外部文件,直接把mock-config.yaml的内容写入到populate-smocker服务的entrypoint中,通过here-doc传递给curl:
populate-smocker: image: curlimages/curl:8.3.0 depends_on: mockserver: condition: service_started entrypoint: - /bin/sh - -c - | curl -X POST --data-binary @- http://mockserver:3001/mocks -H "Content-Type: application/x-yaml" << 'EOF' # 这里粘贴你的mock-config.yaml完整内容 mock-example: request: path: /api/test-endpoint response: status: 200 body: "{\"result\":\"success\"}" EOF
这种方式完全消除了对本地文件的依赖,适合CI/CD环境中文件传输不便的场景。
3. 构建包含配置文件的自定义curl镜像
创建一个极简Dockerfile,把mock-config.yaml打包到curl镜像中:
FROM curlimages/curl:8.3.0 COPY mock-config.yaml /work/mock-config.yaml
在CI/CD流程中构建该镜像(可推送到私有仓库,或直接在VM上本地构建),再修改docker-compose配置使用这个自定义镜像:
populate-smocker: image: your-custom-curl-image:latest depends_on: mockserver: condition: service_started entrypoint: - /bin/sh - -c - 'curl -X POST --data-binary "@/work/mock-config.yaml" http://mockserver:3001/mocks -H "Content-Type: application/x-yaml"'
这种方式适合配置文件需要复用的场景,无需每次执行都传递文件。
内容的提问来源于stack exchange,提问作者David Montgomery
相关产品推荐
相关产品推荐

