'nuxt: not found' Docker with yarn workspace

问题描述 投票:0回答:1

我一直在尝试通过以下设置使用 docker、yarn 和工作区启动并运行一个简单的 Nuxt 3:

  1. mkdir nuxt-app
  2. cd nuxt-app
  3. yarn init -p
    仅使用默认值
  4. mkdir config
  5. mkdir config/admin
  6. 将 docker-compose.yml 添加到根目录
  7. 将 Dockerfile 添加到
    config/admin
  8. mkdir packages
  9. npx nuxi init packages/admin
  10. cd packages/admin
  11. yarn init -p

目录是什么样的

./config
  - admin
    - Dockerfile
./packages
 - admin
    nuxt...
./packages.json
./.dockerignore
./docker-compose.yml

docker-compose.yml

version: '3.7'
services:
  admin:
    container_name: admin_app
    command: yarn dev
    stdin_open: true
    tty: true
    ports:
      - 3030:3030
    build:
      dockerfile: Dockerfile
      context: ./config/admin
    volumes:
      - "./packages/admin:/admin"

Docker文件

FROM node:lts-alpine

WORKDIR /admin

COPY ./package.json yarn.lock ./

RUN yarn install
RUN yarn admin:build

EXPOSE 8000

CMD [ "yarn", "serve" ]

package.json {root}

{
  "name": "docker.nuxt",
  "version": "1.0.0",
  "private": true,
  "workspaces": [
    "packages/*"
  ],
  "scripts": {
    "admin": "yarn --cwd packages/admin dev",
    "admin:build": "yarn --cwd packages/admin build"
  }
}

然后当我运行

docker-compose up
时它会抛出错误
admin_app| /bin/sh: nuxt: not found
。我一直无法找到解决方案。任何帮助都会对我第一次真正使用 docker 有很大帮助。

docker docker-compose nuxt.js hadoop-yarn yarn-workspaces
1个回答
0
投票
  1. admin_app| /bin/sh: nuxt: not found
    - 意味着您没有安装 yarn 依赖项

  1. 在您提供的 docker-compose.yaml 中,您将 Dockerfile 指定为“Dockerfile”,并将上下文指定为文件所在的路径。

简而言之,如果你想将 Dockerfile 存储在不同的位置,你需要在

dockerfile
属性中指定路径,而不是上下文。上下文用于定义“当前目录”的位置(从您复制
package.json
yarn.lock
的位置)。

从官方文档中了解更多。

我会假设你真正想要的是将源文件从

./packages/admin
复制到容器,然后构建你的应用程序。


  1. 您正在尝试从 docker-compose.yaml 挂载源文件以构建您的应用程序。如果您只想将最终构建的文件复制到容器,那么进行两步构建是一个好习惯。

您可以从这里阅读有关多阶段构建的信息。


docker-compose.yaml 示例:

version: '3.7'
services:
  admin:
    container_name: admin_app
    command: yarn dev
    stdin_open: true
    tty: true
    ports:
      - "3030:3030"
    build:
      dockerfile: ./config/admin/Dockerfile
      context: .

Dockerfile示例:

FROM node:lts-alpine AS builder
WORKDIR /admin

# Copy all files for build - ignore unused in .dockerignore
COPY ./packages/admin ./

RUN yarn install
RUN yarn build

EXPOSE 8000

CMD [ "yarn", "dev" ]

注意:这个 Dockerfile 只会构建没有 yarn 工作区的管理包。


更新

如果你想在你的构建中使用工作区,你需要调整 docker 文件。创建多个图像(多阶段构建)会更容易 - 一个用于依赖项,第二个用于应用程序本身:

  1. 基本图像(依赖项):

    1. 复制安装依赖项所需的所有文件
    2. 安装依赖项
  2. 构建图像: 0. 使用

    FROM
    你的基础图片

    1. 通过卷文件复制或挂载以构建包
    2. 构建包
    3. 使用 docker-compose.yaml 运行

注意:您可以创建额外的 docker-compose.build.yaml 来构建一个项目。 官方文档

Dockerfile示例:

FROM node:lts-alpine AS dependencies
WORKDIR /app

# Copy files from project for dependencies install: (TODO)
# COPY ./ ./

RUN yarn install

# -----------------------------

# You can define that in different Dockerfile
# For that build the first path and tag it
#     then replace dependencies with tagged image

FROM dependencies AS admin
WORKDIR /app

COPY ./packages/admin ./
RUN admin:build

EXPOSE 8000

CMD [ "yarn", "dev" ]
© www.soinside.com 2019 - 2024. All rights reserved.