【问题标题】:TypeError: Object(...) is not a function when mounting a volume from the local directory into a next.js containerTypeError: Object(...) is not a function 当将卷从本地目录挂载到 next.js 容器中时
【发布时间】:2021-06-02 16:35:13
【问题描述】:

我正在尝试从本地目录挂载一个卷,以便在开发期间为 Next.js/React 的热重载。我当前的 docker-compose.development.yml 看起来像这样:

services:
  web:
    command: next dev
    volumes:
      - ./:/usr/src/app
      - /usr/src/app/node_modules
      - /usr/src/app/.next
    depends_on:
      db:
        condition: service_healthy

它使用命令 docker-compose -f docker-compose.yml -f docker-compose.development.yml up --build:

扩展了我的主 docker-compose
services:
  web:
    build: .
    command: /bin/sh -c 'npm run build && npm start'
    ports:
      - 3000:3000
      - 5432:5432
    env_file:
      - .env.local

在没有开发覆盖和 docker 的情况下它可以正常工作。我相信这个问题与在容器中运行 next dev 有关,因为即使在删除卷绑定后问题仍然存在。这是full call stack。它指向src/pages/_app.tsx 文件中的错误。

【问题讨论】:

    标签: docker docker-compose next.js


    【解决方案1】:

    当您可以在一个环境中构建项目而无法在另一个环境中执行时,这是解决问题的基本步骤。

    • 确保在构建开始之前运行npm install

      如果这样做,我无法从您共享的共享 sn-ps 中看到。要在容器中构建,您需要安装依赖项。

    • 确保您的 package.json 与开发环境中安装的软件包/模块的版本保持同步。

      如果您没有package.json 或者它没有被维护,您可以查看这个SO post 如何再次生成它。

    • 接下来要检查的是 C/C++ 构建环境。一些模块需要 C/C++ 或 C#/mongo 来构建镜像中的环境。此外,通常需要安装特定的dev 共享库。

      检查您的包需要哪些依赖项,以及需要在操作系统中安装哪些库才能使模块工作。

    • 最后,一些模块依赖于操作系统(例如,仅适用于 Windows,或仅适用于 macOS),或依赖于体系结构(amd64、arm64 等)

      获取有关包/模块的信息并在互联网上进行研究。如果你有这样的模块,你将面临将它们打包到容器中的挑战,所以最好的方法是在你可以容器化之前将它们从你的项目中重构出来。

    【讨论】:

    • 好的,我一定会查看依赖关系,谢谢!
    【解决方案2】:

    我在 Dockerfile 中将 NODE_ENV 设置为 production 而不是 development。我认为它与热重新加载的步骤之一冲突。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-16
      • 2019-04-05
      • 2019-01-30
      • 2020-08-03
      • 1970-01-01
      • 1970-01-01
      • 2018-12-24
      • 2021-10-26
      相关资源
      最近更新 更多