在docker上运行的Next.js开发应用程序

ee7vknir  于 12个月前  发布在  Docker
关注(0)|答案(1)|浏览(113)

我正在尝试使用Docker compose设置一个运行next.js应用程序的Docker容器,以便它可以与其他容器一起使用沿着(例如API或其他服务),我需要的是,在源代码更新后,next.js应用程序可以在真实的时间内编译任何更改。因此,我在主机上为Map到源代码的容器创建了一个卷。问题是容器上的应用程序在源代码上应用了一些更改后不会更新,容器实际上更新了文件(卷被正确Map),但应用程序不会应用更改,也不会再次编译。docker compose的输出控制台是这样的,说@next/swc-linux-x64没有安装:
x1c 0d1x的数据
我认为图像存在一些问题,因为当我在本地机器上运行npm run dev时,它不会显示警告,并且运行良好(在源代码中进行一些更改后,应用程序会更新并编译更改):



所以问题是:是否可以使用Docker为next.js应用程序创建一个开发容器?并且在对主机上的源代码进行更改后,它将能够更新/编译?应用程序不更新源代码中的任何更改可能是什么问题?
我的主机操作系统是Windows 11。节点版本:18.14.0
我的项目结构是:



我使用的文件如下:
Dockerfile.dev

FROM node:18.14.0

WORKDIR /app
COPY package.json ./

RUN npm install

COPY /public .
COPY /src .

EXPOSE 3000

ENV NODE_ENV=development

CMD ["npm", "run", "dev"]

字符串
docker-compose.dev.yml

services:
  frontend:
    environment:
     NODE_ENV: development
    container_name: frontend
    build:
      context: ./frontend
      dockerfile: Dockerfile.dev
    restart: always
    ports:
      - 3000:3000
    volumes:
      - ./frontend:/app
    command: npm run dev
    networks:
      - my_network

networks:
  my_network:


next.config.js

/**
 * @type {import('next').NextConfig}
 */
module.exports = {
    output: process.env.NODE_ENV === 'production' ? 'standalone' : 'module',
};


package.json

{
  "private": true,
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start"
  },
  "dependencies": {
    "@popperjs/core": "^2.11.6",
    "bootstrap": "^5.2.1",
    "date-fns": "^2.29.2",
    "eslint-config-next": "^13.1.6",
    "gray-matter": "^4.0.3",
    "next": "^13.1.6",
    "react": "^18.2.0",
    "react-dom": "^18.2.0",
    "remark": "^14.0.2",
    "remark-html": "^15.0.1"
  }
}

pieyvz9o

pieyvz9o1#

尝试不同的堆栈

对于故障排除,您可以尝试不同的映像和运行时,例如,bun而不是node。下面是我如何使用它与BunJS:
Dockerfile

# Use an official Bun runtime as the base image
FROM oven/bun:debian

# Set the working directory inside the container
WORKDIR /app

# Copy package.json and package-lock.json (if available)
COPY package*.json ./

# Install project dependencies
RUN bun --bun install

# Copy the rest of the application code into the container
COPY . .

# The port that the Next.js app runs on
EXPOSE 3000

# Start the Next.js app
CMD ["bun", "run", "dev"]

字符串
docker-compose.yml

services:
  nextjs:
    build: .
    restart: always
    ports:
      - "3000:3000"
    volumes:
      - .:/app
    networks:
      - my_network

还能看到问题吗?

如果你仍然看到这个问题,那么它不是你使用的图像,也不是Node。
最有可能的是,这是你的主机操作系统设置(例如文件监视器的最大限制)或你的NextJS设置(例如自定义代码设置中断热重载)。

尝试增加文件监视器

您也可以尝试增加文件监视器的限制。
1.在您的主机中,打开sysctl文件:

sudo nano /etc/sysctl.conf


1.添加此行

fs.inotify.max_user_watches=1048576


1.应用更改:

sudo sysctl -p


您必须在主机上执行此操作,因为主机限制了观察者的容器数量。

改为在容器上设置

但是,如果您想在容器上执行此操作,则必须使用管理员权限运行它。
请注意,如果您的容器包含恶意代码,这可能会带来安全风险。
1.将这一行添加到Dockerfile

RUN echo "fs.inotify.max_user_watches=1048576" >> /etc/sysctl.conf


1.以特权运行

docker run --privileged your-image-name


docker-compose.yml

services:
  nextjs:
    # ... rest of your settings ...
    cap_add:
      - SYS_ADMIN

相关问题