为什么我无法将我的文件复制到docker容器中?

时间:2017-07-30 15:56:33

标签: apache docker file-copying

我正在尝试将我的文件移动到apache图像的htdocs文件夹中。 她是我的dockerfile的样子:

FROM httpd:2.4
MAINTAINER Ankit
COPY ./public-html/ /usr/local/apache2/htdocs/

但是COPY命令没有将文件复制到容器中。 这是输出 - index.html默认情况下,我要复制的是public-html文件夹:

root@8453b6ffa6fd:/usr/local/apache2/htdocs# ls
index.html

我有什么遗失的吗?

更新: public-html文件夹没有被复制,但是文件index.html正在那里复制,这种行为的原因是什么?

UPDATE2:这是我最新的dockerfile,用于构建和运行容器的命令。

Dockerfile:
FROM httpd:2.4
MAINTAINER Ankit
COPY public-html/ /usr/local/apache2/htdocs/public-html/

docker build -f Dockerfile -t apache .
docker run -d --name apws -v /Users/ankitsahu/workspace/docker_practi
ce/public-html:/usr/local/apache2/htdocs/ -p 80:80 apache

当我使用exec命令检查内容时:

root@b54e53a231b7:/usr/local/apache2/htdocs# ls -a
.  ..  index.html  sample.html  try

2 个答案:

答案 0 :(得分:3)

如果您尝试将目录public-html复制到目录/usr/local/apache2/htdocs以获得.../htdocs/public-html/目录,请使用以下命令:

COPY public-html/ /usr/local/apache2/htdocs/public-html/

默认情况下,复制目录将复制该目录的内容,因此您需要在目标中将其命名为要显示的目录。

编辑:您的运行命令包含一个将替换此目录的图像内容的卷:

docker run -d --name apws -v /Users/ankitsahu/workspace/docker_practice/public-html:/usr/local/apache2/htdocs/ -p 80:80 apache

如果您想查看图片中的内容,请不要使用该卷:

docker run -d --name apws -p 80:80 apache

如果您想要使用该卷,请修改docker主机上/ Users / ankitsahu / workspace / docker_practice / public-html的内容。

答案 1 :(得分:0)

在将COPY文件发送到除root之外的其他目录之前,您必须创建它们。

将Dockerfile更新为以下

FROM httpd:2.4 MAINTAINER Ankit 
MKDIR -p /usr/local/apache2/htdocs/ # Create the directory with '-p' option. 
COPY ./public-html/ /usr/local/apache2/htdocs/

编辑1

基于文档Docker CP Command,如果

  

DEST_PATH存在且是一个目录,如果

     

SRC_PATH不以/结尾。 (即:斜线后跟点)   将源目录复制到此目录

     

SRC_PATH以/结尾。 (即:斜线后跟点)   将源目录的内容复制到此目录

在您的情况下,/public-html/以斜杠结尾,因此只有内容必须被复制。将其更新为./public-html可以解决问题。

希望这有帮助。