1

我在 docker 中构建工艺 cms,执行时出现以下错误docker-compose up

错误:对于craftcms无法启动服务craftcms:OCI运行时创建失败:container_linux.go:344:启动容器进程导致“process_linux.go:424:容器初始化导致\”rootfs_linux.go:58:安装\\“/host_mnt/c /src/composer.lock\\" to rootfs \\"/var/lib/docker/overlay2/b7084475699f911f17d38746b21b1b9694fedf6e096a4080109d429fa687a6db/merged\\" at \\"/var/lib/docker/overlay2/b7084475699f911f17d38746b21b1b9694fedf6e096a4080109d429fa687a6db/merged/var/www/ composer.lock\\" 导致 \\"not a directory\\"\"":未知:您是否尝试将目录挂载到文件上(反之亦然)?检查指定的主机路径是否存在并且是预期的类型错误:启动项目时遇到错误。

显然,Windows 操作系统中的挂载目录与 Linux 操作系统不同。你能帮我解决这个问题吗?

在此处输入图像描述

更新

在 docker-compose.yml 中,这是我挂载文件的位置:

craftcms:
    build:
      context: .
      dockerfile: ./infrastructure/docker/php-fpm/Dockerfile
    expose:
      - 9000
    volumes:
      - cpresources:/var/www/web/cpresources
      - ./src/vendor:/var/www/vendor
      - ./src/composer.json:/var/www/composer.json
      - ./src/composer.lock:/var/www/composer.lock
      - ./src/config:/var/www/config
      - ./src/modules:/var/www/modules
      - ./src/templates:/var/www/templates
      - ./src/web:/var/www/web
4

1 回答 1

2

这通常表明该src/composer.lock文件不是文件,或者这些文件所在的驱动器未正确共享给 docker VM。

对于前者,请检查您运行的目录docker-compose,这是经过审查的目录,因此我无法为您提供比这更好的详细信息。您应该src\composer.lock在其中有一个常规文件,而不是目录。

对于后者,进入 docker 首选项,并重新配置驱动器共享以确保包含您的 compose 项目的驱动器,并且 docker 具有您当前的密码(它执行 windows SMB 挂载以将驱动器共享到 docker VM)。

当 docker 尝试将不存在的文件挂载为主机挂载时,默认操作是在主机上创建一个目录(如果该目录未正确共享,这可能仅在 docker VM 中)并将该目录挂载到容器。如果这应该是一个文件而不是容器内的目录,你会得到一个错误。

于 2019-06-25T10:44:53.997 回答