Docker-in-Docker挂载宿主机卷无内容问题排查与解决
问题
通过挂载宿主机docker.sock实现Docker-in-Docker(DinD),使用的docker-compose.yml配置如下:
services: dw-app: build: . ports: - "127.0.0.1:8500:8500" volumes: - /var/run/docker.sock:/var/run/docker.sock - ./uploads:/app/uploads - ./db:/app/db - ./flask-logging.log:/app/flask-logging.log - ./gunicorn-logging.log:/app/gunicorn-logging.log - ./flask-config.cfg:/app/flask-config.cfg environment: - UPLOAD_PATH=/mnt/c/Users/<user>/OneDrive/Dokumente/<company>/docker-workflow-web-app #- UPLOAD_PATH=/app - FLASK_CFG_PATH=/app/flask-config.cfg stdin_open: true tty: true
程序中执行的Python代码:
HOST_UPLOAD_DIR = os.path.join(os.environ.get('UPLOAD_PATH'), dir_path) print(HOST_UPLOAD_DIR) if not zotero_used: docker_command = ["docker", "run","--rm", "--volume", f"{HOST_UPLOAD_DIR}:/app/files", "d2md-debug", doc_file_name] result = subprocess.run(docker_command)
问题现象:d2md-debug容器能正常创建,但挂载的HOST_UPLOAD_DIR目录为空,文件无法找到。宿主机直接执行相同命令可正常运行,已将目录权限设为777,且该目录可通过容器挂载正常读写,更换其他路径(如/home/<user>/uploads)也无效,此前该方案可正常使用。
解决方案
2024年5月更新
Docker Desktop 4.30.+版本已修复此问题,无需再使用此前的解决方法,官方补丁说明如下:
Fixed a regression in Docker Desktop 4.28 that caused host files bind-mounted into containers to not show up properly inside the container, when using Docker-in-Docker (via mounts of /var/run/docker.sock) on WSL.
此前解决方法
采用DavidMaze的建议,将路径改为/c/Users/...替代/mnt/c/User/..(适用于Windows版Docker Desktop)。
内容的提问来源于stack exchange,提问作者Thomas J.
相关产品推荐
相关产品推荐

