无法复制 nginix /etc/nginx/conf.d/default.conf 中的配置文件

Posted

技术标签:

【中文标题】无法复制 nginix /etc/nginx/conf.d/default.conf 中的配置文件【英文标题】:Unable to COPY config file in nginix /etc/nginx/conf.d/default.conf 【发布时间】:2019-11-14 09:41:20 【问题描述】:

无法将我的项目目录中的配置文件复制到 /etc/nginx/conf.d/default.conf

源文件位置: /app/nginix.conf

COPY nginx.conf /etc/nginx/conf.d/default.conf

目标:/etc/nginx/conf.d/default.conf

docker 文件中的步骤:

Tried the multi stage build:

- FROM node:8.9.0 as buid
- WORKDIR /app
- COPY package.json package-lock.json ./
- RUN npm install
- COPY . ./
- RUN npm run build


- FROM nginx:alpine
- RUN mkdir -p /var/www/html/client
- COPY --from=buid /app/nginix.conf /etc/nginx/conf.d/default.conf
- COPY --from=buid /app/build/ /var/www/html/client

尝试注释第一个复制命令,它能够复制构建并且很好。 当它能够在应用程序目录中找到构建时,为什么它无法找到也在同一目录中的 nginix.conf 文件,执行 ls -la 并看到了 nginix.conf 文件。

TIA

【问题讨论】:

在您的本地系统上,nginx.conf 是否与您的 Dockerfile 在同一目录中? 是的,Docker 文件和 nginix.conf 都在同一个目录下。 【参考方案1】:

如果源文件路径是/app/nginix.conf,那么dockefile应该包含:

COPY /app/nginx.conf /etc/nginx/conf.d/default.conf

如果您从主机上的/app 目录运行docker build 命令,那么您上面的 dockerfile 应该可以工作。

更新:

如果您希望 node docker 映像的 /app/nginx.conf 文件出现在 nginx:alpine 映像中,那么您需要使用 multi-stage docker builds。

将您的 dockerfile 更改为

FROM node as build
WORKDIR /app
COPY package json files 
RUN npm build

FROM nginx:alpine 
COPY --from=build /app/nginx.conf /etc/nginx/conf.d/default.conf

这会将/app/nginx.conf 文件从node 图像复制到nginx:alpine 图像。

【讨论】:

我也试过了:复制失败:stat /var/lib/docker/tmp/docker-builder-number/app/nginx.conf:没有这样的文件或目录。达到这一点后: FROM nginix:alpine 目录正在改变,我无法弄清楚。 你能解释一下,你得到了什么输出。 - FROM node - WORKDIR /app - COPY package json files - RUN npn build 我试过 pwd 和 ls -la,我可以看到我所有的项目文件和我的配置文件 FROM nginix:alpine not确定在此之后发生了什么。 该 nginx.conf 文件是否在 /app 文件夹中的 FROM 节点映像中创建,而您希望在 FROM nginx:alpine 映像中创建该文件。 我想要 /app 文件夹中的那个,但是当我从 nginx:alpine 执行时,root 正在更改并且无法找到 nginix.conf 文件。【参考方案2】:

如果有人还在为此苦苦挣扎......

将 WORKDIR 从 app 更改为 builddir 有效!

FROM node:alpine as builder 
WORKDIR '/builddir'
COPY package.json .
RUN npm install
COPY . .
RUN npm run build

FROM nginx:alpine
COPY --from=builder /builddir/build /usr/share/nginx/html
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx/nginx.conf /etc/nginx/conf.d
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

【讨论】:

以上是关于无法复制 nginix /etc/nginx/conf.d/default.conf 中的配置文件的主要内容,如果未能解决你的问题,请参考以下文章

nginix

nginx 配置虚拟主机

Nginx 显示欢迎页面/403 错误而不是主页

作曲家内存限制泊坞窗

Jenkins+Gitlab+Ansible自动化部署

Nginx访问状态统计虚拟主机设置