我有以下问题。我正在尝试使用docker-compose挂载卷。当没有挂载卷时,容器工作得非常好。但是,当我尝试将本地目录挂载到Docker容器中的路径时,目标路径变为空,并且Docker容器损坏。本地文件夹似乎正在覆盖容器中的文件夹。此问题并非特定于特定图像;它也会影响其他Docker容器。在Docker Desktop中,相应的路径列在“文件共享”下。下面是一个示例文件:
version: '3'
services:
shop:
container_name: Dev_shopware6
image: dockware/dev:6.5.3.3
ports:
- "22:22" # ssh
- "80:80" # apache2
- "443:443" # apache2 https
- "8888:8888" # watch admin
- "9998:9998" # watch storefront proxy
- "9999:9999" # watch storefront
- "3306:3306" # mysql port
volumes:
- ./src:/var/www/html
networks:
- web
environment:
- XDEBUG_ENABLED=0
个字符
我正在使用Docker Desktop在MacOS上工作
项目结构
.
├── docker
│ └── db
├── docker-compose.yml
├── readme.md
└── src
4 directories, 2 files
型
ls-la在容器内
www-data@63f6c46e9787:~/html$ ls -la
total 492
drwxr-xr-x 1 www-data www-data 4096 Jul 18 15:49 .
drwxrwxrwx 1 root root 4096 Jul 18 15:49 ..
-rw-r--r-- 1 www-data www-data 1247 Jul 18 15:42 .env
-rw-r--r-- 1 www-data www-data 647 Jul 18 15:42 .gitignore
-rw-r--r-- 1 www-data www-data 369 Jul 18 15:42 .htaccess
-rw-r--r-- 1 www-data www-data 350 May 3 10:38 README.md
drwxr-xr-x 1 www-data www-data 4096 Jul 18 15:42 bin
-rw-r--r-- 1 www-data www-data 1769 Jul 18 15:44 composer.json
-rw-r--r-- 1 www-data www-data 415799 Jul 18 15:44 composer.lock
drwxr-xr-x 1 www-data www-data 4096 Jul 18 15:42 config
drwxr-xr-x 1 www-data www-data 4096 Jul 18 15:42 custom
-rw-r--r-- 1 www-data www-data 334 Jul 18 15:42 docker-compose.override.yml
-rw-r--r-- 1 www-data www-data 1070 Jul 18 15:42 docker-compose.yml
drwxr-xr-x 1 www-data www-data 4096 Jul 18 15:43 files
-rw-rw-rw- 1 www-data www-data 0 Jul 18 15:43 install.lock
drwxr-xr-x 1 www-data www-data 4096 Jul 18 15:43 public
-rw-r--r-- 1 www-data www-data 6427 Jul 18 15:42 symfony.lock
drwxr-xr-x 1 www-data www-data 4096 Jul 18 15:44 var
drwxr-xr-x 1 www-data www-data 4096 Jul 18 15:44 vendor
型
2条答案
按热度按时间ep6jt1vc1#
从文档:
如果您将目录绑定挂载到容器上的非空目录中,则该目录的现有内容将被绑定挂载隐藏。这可能是有益的,例如当您想要测试应用程序的新版本而不构建新映像时。然而,它也可能令人惊讶,并且这种行为与Docker卷的行为不同。
因此,基本上,您不能在映像中现有目录的顶部绑定挂载主机目录,而不会“隐藏”映像中的目录内容。
您将
./src
目录挂载到/var/www/html/
上,这将隐藏/var/www/html/
及以下目录中的所有内容。vof42yt12#
根据您在评论中的回复,我假设您希望为您在评论部分中共享的项目创建一个开发环境。
您可以执行以下操作:
1.运行您的容器**,但不使用装载行
1.运行此command
docker cp <container name>:/var/www/html/ ./src
(路径可能因系统而异)1.使用装载线运行容器
这样你的src文件夹将包含原始容器中的所有文件。您共享的project有公用文件夹,因此一切都应该正常工作。