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
注意:我在 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