将本地目录挂载到docker(docker卷)中的容器时出现问题。

问题描述 投票:0回答:1

我有三个文件:

Dockerfile:

FROM php:7.2-apache
COPY src/ /var/www/html
EXPOSE 80

码头工人,compose.yml:

version: '3'

services:
    hello-world:
        build: .
        volumes:
         - ./src:/var/www/html
        ports:
         - 80:80

SRC / index.php文件:

<?php

echo "Hello World!";
?>

然后我运行命令:

docker-compose up

到目前为止一切都很好,但是当我在浏览器中访问localhost时,我得到:

403禁止您无权访问此服务器上的/。

...并从容器中输出错误消息:

无法提供目录/ var / www / html /:找不到匹配的DirectoryIndex(index.php,index.html),以及Options指令禁止的服务器生成的目录索引

但是,如果我从docker-compose.yml文件中删除了2行:

        volumes:
         - ./src:/var/www/html

...一切正常(除了没有安装文件夹)。我究竟做错了什么?它显然不喜欢我安装卷,导致目录/ var / www / html /为空,但为什么?

docker docker-compose dockerfile docker-volume
1个回答
0
投票

在构建文件中,您将src的内容复制到图像中(在/var/www/html下)。 src目录是构建上下文的一部分,并且必须位于“构建”根目录下。这可能是您运行docker build命令的地方,通常是dockerfile居住的地方。

在compose文件中,您将src目录映射到/var/www/html的顶部,在运行时将其内容替换为src

我猜你实际上只想做这两件事之一。要么是好的,取决于你想要实现的目标,但根据你的报告看起来你正在运行你的docker-compose up的地方有一个空的src目录,因此出现错误信息。要解决此问题,请使用要提供的目录的绝对路径,或删除该容器的volumes定义。

检查此方法的一种方法(假设您标记了图像HelloWorld):

docker run -it -d --name helloworld -p 80:80 HelloWorld

然后,docker ps只是检查它是否正在运行。如果一切正常,试试这个:

docker exec -it -w /var/www/html helloworld ls -gAlFh

这应该会给你一个列表,列出该目录中的内容。你也可以试试这个:

docker exec -it -w /var/www/html helloworld sh

在该目录中获取shell,以便您可以更轻松地进行探索。

© www.soinside.com 2019 - 2024. All rights reserved.