Apache Docker添加和复制在Dockerfile中不受尊重

Apache Docker添加和复制在Dockerfile中不受尊重,apache,docker,Apache,Docker,当我尝试构建以下Dockerfile时,添加和复制步骤不起任何作用: # Use an official Apache runtime as a parent image FROM amd64/httpd # Set the working directory WORKDIR /usr/local/apache2 # Copy the following contents into the container ADD ./httpd.conf {$workdir}/conf/httpd.c

当我尝试构建以下Dockerfile时,添加和复制步骤不起任何作用:

# Use an official Apache runtime as a parent image
FROM amd64/httpd

# Set the working directory
WORKDIR  /usr/local/apache2

# Copy the following contents into the container
ADD ./httpd.conf {$workdir}/conf/httpd.conf
COPY ./Projects/RavensHomeSupport/build/* {$workdir}/htdocs/Test/

# Make port 80 available to the world outside this container
EXPOSE 80

# Define environment variable
ENV NAME RavensHomeWeb
我运行以下生成命令:

docker build -t ravenshome --rm --no-cache .
当我检查正在运行的容器中测试目录的内容时,我所期望的数据都没有被复制到容器中。build命令的输出在这里

Sending build context to Docker daemon  1.444MB
Step 1/6 : FROM amd64/httpd
 ---> 19459a872194
Step 2/6 : WORKDIR  /usr/local/apache2
 ---> Running in 192cb44f767e
Removing intermediate container 192cb44f767e
 ---> d9816ea17258
Step 3/6 : ADD ./httpd.conf {$workdir}/conf/
 ---> 19f48db970bb
Step 4/6 : COPY ./Projects/RavensHomeSupport/build/ {$workdir}/htdocs/Test/
 ---> d93939218c2b
Step 5/6 : EXPOSE 80
 ---> Running in 43b9e9297f60
Removing intermediate container 43b9e9297f60
 ---> 3b994be07747
Step 6/6 : ENV NAME RavensHomeWeb
 ---> Running in a64bccaf81c8
Removing intermediate container a64bccaf81c8
 ---> 9217c242868c
Successfully built 9217c242868c
Successfully tagged ravenshome:latest
我使用以下命令启动容器:

docker run -dit -p 8080:80 --name ravenshome ravenshome
docker exec ravenshome ls -a /usr/local/apache2/htdocs
当我使用以下命令检查容器中的问题目录时:

docker run -dit -p 8080:80 --name ravenshome ravenshome
docker exec ravenshome ls -a /usr/local/apache2/htdocs
我得到以下结果:

.
..
index.html
如您所见,所有这些都是默认图像的内容,而不是我所期望的其他内容。 类似地,httpd.conf的自定义版本也不会复制到新容器中。 我读过几篇文章,认为问题是由于使用了卷,但我没有这样做,也没有.dockrignore文件。 有人知道我做错了什么吗?

$workdir不是一个定义的环境变量,因此它扩展为一个空字符串$大括号内的变量根本不是特殊语法;它在花括号内展开为变量展开。这样做的最终结果是这两条线:

WORKDIR  /usr/local/apache2
ADD ./httpd.conf {$workdir}/conf/httpd.conf
将内容复制到目录/usr/local/apache2/{}/conf/http.conf中-大括号内没有任何内容,大括号本身被解释为相对于当前工作目录的目录

这里根本不需要环境变量;您只需复制到当前WORKDIR即可


有关允许的表单,请参见docker-compose.yml文档中的;您可能正在考虑花括号之外的${variable}语法美元。

如果您再看一看,会看到什么?可能有/usr/local/apache2/{}/conf目录吗?@David Maze-是的,但是我一直找不到这个目录的任何用途,如果我尝试使用当前的WORKDIR,构建运行时没有任何问题,但是当我尝试运行容器时,它会立即退出,没有任何可见的原因。