在Docker容器中挂载卷的问题

oxf4rvwz  于 2023-08-03  发布在  Docker
关注(0)|答案(2)|浏览(135)

我有以下问题。我正在尝试使用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

ep6jt1vc

ep6jt1vc1#

从文档:
如果您将目录绑定挂载到容器上的非空目录中,则该目录的现有内容将被绑定挂载隐藏。这可能是有益的,例如当您想要测试应用程序的新版本而不构建新映像时。然而,它也可能令人惊讶,并且这种行为与Docker卷的行为不同。
因此,基本上,您不能在映像中现有目录的顶部绑定挂载主机目录,而不会“隐藏”映像中的目录内容。
您将./src目录挂载到/var/www/html/上,这将隐藏/var/www/html/及以下目录中的所有内容。

vof42yt1

vof42yt12#

根据您在评论中的回复,我假设您希望为您在评论部分中共享的项目创建一个开发环境。
您可以执行以下操作:
1.运行您的容器**,但不使用装载行
1.运行此commanddocker cp <container name>:/var/www/html/ ./src(路径可能因系统而异)
1.使用装载线运行容器

这样你的src文件夹将包含原始容器中的所有文件。您共享的project有公用文件夹,因此一切都应该正常工作。

相关问题