首页 > 解决方案 > 文件在 docker-compose 中不可见

问题描述

我对 docker 很陌生,我尝试用 docker-compose 构建一个 LAMP 堆栈。我在那里找到了一个不错的教程。我想我理解卷和绑定挂载之间的区别,但是,我想我在某些时候遇到了问题。我想让我的一个文件夹可用于 LAMP 堆栈(我的源代码,位于文件夹“src”中)。但是,源在 /var/www/html 文件夹中不可见。

我的 docker-compose 文件如下所示:

version: "3.7"

services: 
  mariadb: 
    environment: 
      MYSQL_ALLOW_EMPTY_PASSWORD: "no"
      MYSQL_DATABASE: testdb
      MYSQL_PASSWORD: testpassword
      MYSQL_ROOT_PASSWORD: rootpwd
      MYSQL_USER: testuser
      TZ: Europe/Rome
    image: "mariadb:10.5.2"
    volumes: 
      - "mariadb-volume:/var/lib/mysql"
      
  php-httpd: 
    image: "php:7.3-apache"
    ports: 
      - "80:80"
    volumes: 
       - ./src/:/var/www/html/
       
  phpmyadmin: 
    image: phpmyadmin/phpmyadmin
    links: 
      - "mariadb:db"
    ports: 
      - "8081:80"

volumes: 
  mariadb-volume: ~

Phpmyadmin 工作得很好,docker-compose 运行也没有任何警告。我的撰写命令是

docker-compose up -d --force-recreate

有趣的是,当我将“./src/”更改为“./DocumentRoot”时,会在我的主机上创建文件夹 DocumentRoot。但是,将文件放在主机上的 DocumentRoot 或 docker 中的 /var/www/html 中不会分别显示 docker 或主机上的文件。尽管如此,我可以肯定地说我至少在正确的目录中。

我需要传递一些技巧或参数来让 docker 查看我主机上的文件吗?

标签: dockerdocker-compose

解决方案


我想让我的一个文件夹可用于 LAMP 堆栈(我的源代码,位于文件夹“src”中)。但是,源在 /var/www/html 文件夹中不可见。

我认为关于安装如何与 docker 一起工作存在混淆。
当您为 docker 容器指定挂载时,例如:

 php-httpd: 
    image: "php:7.3-apache"
    ports: 
      - "80:80"
    volumes: 
       - ./src/:/var/www/html/

只有容器php-httpd会设置挂载,而不是 LAMP 堆栈的其他容器。
如果您需要在其他容器上设置该挂载,请在它们上明确执行。

有趣的是,当我将“./src/”更改为“./DocumentRoot”时,会在我的主机上创建文件夹 DocumentRoot。但是,将文件放在主机上的 DocumentRoot 或 docker 中的 /var/www/html 中不会分别显示 docker 或主机上的文件。

这就是坐骑的工作方式。当该文件夹存在于主机(此处src)上时,docker 使用它将其内容从主机挂载到容器。当文件夹没有在主机上退出时,Docker 会创建它。


推荐阅读