docker 不在 C 盘时 COPY 全部失败

docker COPY all fails when not in C drive

注意:我在 windows 10,使用 docker-machine / virtual box

我有一个项目,在我的 C:\ 驱动器上可以正常构建和运行。

如果我将所有文件复制到我的第二个硬盘 F:\ 我的 Dockerfile 中的 COPY . /path 命令似乎成功了,但是当我检查容器是空的。

我的docker文件;

FROM php:7.3-apache-stretch

RUN docker-php-ext-install pdo_mysql \
    && a2enmod rewrite negotiation

COPY docker/php/php.ini /usr/local/etc/php/php.ini
COPY docker/apache/vhost.conf /etc/apache2/sites-available/000-default.conf
COPY . /srv/app

WORKDIR /srv/app

我的docker-compose.yml文件;

version: '3'
services:
  app:
    build: .
    ports:
      - 8080:80
    volumes:
      - .:/srv/app

奇怪的是前两个 COPY 命令有效

COPY docker/php/php.ini /usr/local/etc/php/php.ini
COPY docker/apache/vhost.conf /etc/apache2/sites-available/000-default.conf

我可以导航到这两个目录并分别查看这两个文件的正确内容。一些资源表明容器无法访问我的第二个驱动器,但它显然可以访问,否则这些文件也将无法工作。

仅供参考,我正在使用以下内容构建然后检查容器

docker-machine up -d --build
docker-machine exec app bash
ls

更新 如果我将复制文件夹更改为 /var/www/html,该命令将正常运行。我目前只将文件放在 /srv/app 中,因为我一直在学习教程。我现阶段还不知道 advantage/disadvantage。


解决方案 感谢@LinPy,我使用这条评论来帮助我获得正确的设置:https://github.com/docker/machine/issues/3908#issuecomment-412385611

我在 C:\Program Files\Oracle\VirtualBox 中打开了一个命令提示符,运行 下面的命令。

VBoxManage.exe sharedfolder add default --name "/f" --hostpath "f:\" --automount

我的 VirtualBox 设置现在看起来像这样;

试试这个:

docker-machine stop

vboxmanage sharedfolder add default --name "project_name" --hostpath "<full_project_path>" --automount

docker-machine start 

然后配置 mount

volumes:
  - /project_name:/path/in/container/project_name

如果没有帮助,试试这个:

docker-machine create -d virtualbox --virtualbox-share-folder "\?\f:\paht1\path2:installdir" test2

你也可以看到这个issue