Docker 以及如何使用更新的 Nginx 更新 Debian.. 无法构建

Docker 以及如何使用更新的 Nginx 更新 Debian.. 无法构建
  • 我正在尝试使用 Docker 并更新 Nginx,但构建一直失败。
  • 我目前有两个文件。我正尝试只使用 Docker 文件,有什么想法吗?顺便说一句,我看到 Nginx 部分没有更新(在构建中,仍然显示 1.10.3)
  • Dockerfile 中的“开发”环境让我认为这只是为了本地?

docker-base/Docker 文件。旧。要更新节点和 Nginx 的内容。

FROM node:10.1

RUN apt-get update && apt-get install -y nginx build-essential gyp libpng-dev bzip2 autoconf libtool nasm libvips-dev --no-install-recommends && mkdir -p /usr/src/app

COPY ./package.json /usr/src/app/

WORKDIR /usr/src/app/

RUN npm install -g node-gyp

我想删除它并将其添加到 DOCKER 文件中……

FROM oudatedImage 

RUN apt-get update && apt-get install -y libvips-dev --no-install-recommends

COPY package.json /usr/src/app/

WORKDIR /usr/src/app/

RUN NODE_ENV=development npm install

COPY . /usr/src/app

RUN npm run build

EXPOSE 80

CMD ["sh", "run_app.sh"]

据我所知,从 docker-base/Docker 文件创建一个映像,然后将其插入到 Docker 文件中...但我不需要该映像或该过程...我想在 Dockerfile 中总结这一切。

有什么想法吗?我尝试更新到较新版本的 node stretch,但 Nginx 无法更新,构建失败。关于在 Dockerfile 中合并两者并更新 node 和 Nginx 有什么想法吗?

答案1

根据目前的描述,在我看来,您似乎已经进行了一些设置,可以根据第一个文件构建映像,将其推送到 GCR,然后将其用作第二个文件的基础。因此,我假设您已经意识到这一点,您了解您的系统/管道,并且您知道社区无法访问您的环境来对其进行评估。

现在,您的问题是:如何更新 Nginx、Node 以及如何将所有内容放在一个 Dockerfile 中。

# Use the latest base image
FROM node:latest

# Adding this here bc is only relevant for your environment
ARG NODE_ENV='production'
ARG CLIENT_HOST='cdn.mysite.com'
ARG PORT='80'
ARG HOST='www.mysite.com'
ARG API_HOST='api.mysite.com'
ARG API2_HOST='api2.mysite.com'
ARG PROTOCOL='https'
ENV NODE_ENV $NODE_ENV
ENV CLIENT_HOST $CLIENT_HOST
ENV PROTOCOL $PROTOCOL
ENV API2_HOST $API2_HOST
ENV API_HOST $API_HOST
ENV HOST $HOST
ENV PORT $PORT

# Adding the new mainline package for Stretch to match the Node Docker image and adding the signing keys
RUN echo "deb http://nginx.org/packages/mainline/debian/ stretch nginx \
deb-src http://nginx.org/packages/mainline/debian/ stretch nginx" > /etc/apt/sources.list.d/nginx.list && wget -qO - https://nginx.org/keys/nginx_signing.key | apt-key add -

# Your package dependencies + latest Nginx
RUN apt update -y && apt install -y nginx build-essential gyp libpng-dev bzip2 autoconf libtool nasm libvips-dev --no-install-recommends && mkdir -p /usr/src/app

# Appending the GCR file build steps
COPY package.json /usr/src/app/

WORKDIR /usr/src/app/

RUN NODE_ENV=development npm install

COPY . /usr/src/app

RUN npm run build

EXPOSE 80

CMD ["sh", "run_app.sh"]

解释

基本上,Node 镜像带有过时的 Nginx 版本,因此您需要遵循官方 Nginx repo 更新

正如您在 Dockerfile 中看到的,我只是在RUN安装所有软件包之前的步骤中添加了这些操作。

至于 Node 版本,你正在运行过时的版本甚至没有在 Dockerhub 中列出,所以我只使用了最新的一个。

截至撰写本文时,它应该具有 Nginx 1.17.10 和 Node v14.3.0

关于ARG指令,这些有你的自定义默认值这似乎只与您的上下文相关,所以我只是将它们包括在那里,因为社区不可能知道它们是否与您的管道中的错误有关。

最后,如果构建失败,您需要提供错误以获得更准确的答案或澄清您的整个上下文并具体说明您的需求。

希望这对你有帮助。

相关内容