Dockerfile以复制文件

Dockerfile以复制文件,docker,nginx,Docker,Nginx,我正在编写一个Dockerfile来创建一个具有基本http身份验证的nginx映像。我需要复制本地nginx.conf文件和一个包含登录信息的文件(htpasswd),并将其写入Dockerfile,但它似乎不起作用。当我查看容器中的nginx.conf时,它仍然是默认的,并且网页上没有身份验证功能。帮忙 FROM nginx:latest ADD ./gilbard /usr/share/nginx/html COPY ./nginx.conf /etc/nginx/nginx.conf

我正在编写一个Dockerfile来创建一个具有基本http身份验证的nginx映像。我需要复制本地nginx.conf文件和一个包含登录信息的文件(htpasswd),并将其写入Dockerfile,但它似乎不起作用。当我查看容器中的nginx.conf时,它仍然是默认的,并且网页上没有身份验证功能。帮忙

FROM nginx:latest

ADD ./gilbard /usr/share/nginx/html

COPY ./nginx.conf /etc/nginx/nginx.conf
COPY ./htpasswd /etc/nginx/conf.d/.htpasswd

# Expose port
EXPOSE 80

你的方法是正确的

如果工作目录中不存在
COPY
文件,则生成将生成错误

也许您的build | run命令有错误,请将这些添加到您的问题中

我能够重新编写您的问题,并且正确复制了我的
nginx.conf

更多信息。/nginx.conf
你好,弗雷迪
docker build--tag=58188265--file=./Dockerfile。
docker运行——交互式——tty 58188265/bin/sh-c“more/etc/nginx/nginx.conf”
你好,弗雷迪

nginx.conf文件本地存储在/etc/nginx/nginx.conf中,至少存储在ubuntu机器上

看起来您的dockerfile正在使用dockerfile的当前位置复制nginx.conf

您是否将nginx.conf存储在与Dockerfile相同的目录中

换句话说,您的副本应该如下所示:

COPY /etc/nginx/nginx.conf /etc/nginx/nginx.conf
但是,此操作可能存在权限问题。我不太确定,但试试看

另一种选择是:

sudo docker cp /etc/nginx/nginx.conf container_id:/etc/nginx/nginx.conf

原来我还在使用以前的图像来构建容器,谢谢!这个答案有误导性。
COPY
命令的源是到生成上下文的相对路径,而不是到主机文件系统的相对路径。如前所述,“使用Dockerfile的当前位置”是指生成上下文,而不是主机文件系统。不要认为这有误导性——给定的备选方案使用主机路径而不是上下文相关路径。源代码中的
/etc
在不同的示例中是两个不同的东西。特别是因为这意味着从带有
/
的显式相对路径更改为以
/etc
开头的隐式但命名混乱的相对路径,我认为这是误导。它也不能回答这个问题,因为无效路径将导致生成失败,而不是旧文件。生成上下文与Dockerfile的位置也不一样。虽然它们默认位于同一位置,但可以独立配置。