运行 Docker-Compose 时找不到 Monorepo 共享包
Monorepo Shared Package not Found when Running Docker-Compose
我用 lerna and yarn workspaces 设置了一个 monorepo。
一切都用打字稿编写并编译成 javascript.
但是当 运行 通过 docker-compose
连接 monorepo 时,共享包会出现问题。
我创建了一个小的 repo,它模仿了以下行为:https://github.com/skatestyle/Whosebug-monorepo-dependencies。
基本上有一个@root/common
和一个@root/server
包。 server
导入 common
。 运行ning node packages/server/lib/index.js
时一切正常。 (请注意,您需要 运行 yarn bootstrap
和 yarn build
才能开始)
但是当 运行通过 docker-compose up --build
连接我的 docker-compose 文件时,我收到以下错误:
Building server
Step 1/4 : FROM node:alpine
---> d4edda39fb81
Step 2/4 : COPY . /src
---> Using cache
---> d96b00510d47
Step 3/4 : WORKDIR /src
---> Using cache
---> f112f411cdfb
Step 4/4 : CMD node lib/index.js
---> Using cache
---> 87a4cea60811
Successfully built 87a4cea60811
Successfully tagged Whosebug-monorepo-dependecies_server:latest
Starting Whosebug-monorepo-dependecies_server_1 ... done
Attaching to Whosebug-monorepo-dependecies_server_1
server_1 | internal/modules/cjs/loader.js:626
server_1 | throw err;
server_1 | ^
server_1 |
server_1 | Error: Cannot find module '@root/common'
server_1 | Require stack:
server_1 | - /src/lib/index.js
server_1 | at Function.Module._resolveFilename (internal/modules/cjs/loader.js:623:15)
server_1 | at Function.Module._load (internal/modules/cjs/loader.js:527:27)
server_1 | at Module.require (internal/modules/cjs/loader.js:681:19)
server_1 | at require (internal/modules/cjs/helpers.js:16:16)
server_1 | at Object.<anonymous> (/src/lib/index.js:7:16)
server_1 | at Module._compile (internal/modules/cjs/loader.js:774:30)
server_1 | at Object.Module._extensions..js (internal/modules/cjs/loader.js:785:10)
server_1 | at Module.load (internal/modules/cjs/loader.js:641:32)
server_1 | at Function.Module._load (internal/modules/cjs/loader.js:556:12)
server_1 | at Function.Module.runMain (internal/modules/cjs/loader.js:837:10) {
server_1 | code: 'MODULE_NOT_FOUND',
server_1 | requireStack: [ '/src/lib/index.js' ]
server_1 | }
是的,我需要使用 docker-compose
,因为我的真实项目有更多的服务器 运行ning.
错误可能出在我的Dockerfile
或docker-compose.yml
,但我找不到。
在此先感谢您的帮助!
在你身上 docker-compose 你创造了体积
./packages/server:/src
container 内部的结构会和你本地的不一样。尝试:
version: '3'
services:
server:
build: ./packages/server
volumes: - ./:/src
在 dockerfile 上:
FROM node:alpine
COPY . /src
WORKDIR /src
CMD ["node","packages/server/lib/index.js"]
希望对您有所帮助
我用 lerna and yarn workspaces 设置了一个 monorepo。 一切都用打字稿编写并编译成 javascript.
但是当 运行 通过 docker-compose
连接 monorepo 时,共享包会出现问题。
我创建了一个小的 repo,它模仿了以下行为:https://github.com/skatestyle/Whosebug-monorepo-dependencies。
基本上有一个@root/common
和一个@root/server
包。 server
导入 common
。 运行ning node packages/server/lib/index.js
时一切正常。 (请注意,您需要 运行 yarn bootstrap
和 yarn build
才能开始)
但是当 运行通过 docker-compose up --build
连接我的 docker-compose 文件时,我收到以下错误:
Building server
Step 1/4 : FROM node:alpine
---> d4edda39fb81
Step 2/4 : COPY . /src
---> Using cache
---> d96b00510d47
Step 3/4 : WORKDIR /src
---> Using cache
---> f112f411cdfb
Step 4/4 : CMD node lib/index.js
---> Using cache
---> 87a4cea60811
Successfully built 87a4cea60811
Successfully tagged Whosebug-monorepo-dependecies_server:latest
Starting Whosebug-monorepo-dependecies_server_1 ... done
Attaching to Whosebug-monorepo-dependecies_server_1
server_1 | internal/modules/cjs/loader.js:626
server_1 | throw err;
server_1 | ^
server_1 |
server_1 | Error: Cannot find module '@root/common'
server_1 | Require stack:
server_1 | - /src/lib/index.js
server_1 | at Function.Module._resolveFilename (internal/modules/cjs/loader.js:623:15)
server_1 | at Function.Module._load (internal/modules/cjs/loader.js:527:27)
server_1 | at Module.require (internal/modules/cjs/loader.js:681:19)
server_1 | at require (internal/modules/cjs/helpers.js:16:16)
server_1 | at Object.<anonymous> (/src/lib/index.js:7:16)
server_1 | at Module._compile (internal/modules/cjs/loader.js:774:30)
server_1 | at Object.Module._extensions..js (internal/modules/cjs/loader.js:785:10)
server_1 | at Module.load (internal/modules/cjs/loader.js:641:32)
server_1 | at Function.Module._load (internal/modules/cjs/loader.js:556:12)
server_1 | at Function.Module.runMain (internal/modules/cjs/loader.js:837:10) {
server_1 | code: 'MODULE_NOT_FOUND',
server_1 | requireStack: [ '/src/lib/index.js' ]
server_1 | }
是的,我需要使用 docker-compose
,因为我的真实项目有更多的服务器 运行ning.
错误可能出在我的Dockerfile
或docker-compose.yml
,但我找不到。
在此先感谢您的帮助!
在你身上 docker-compose 你创造了体积
./packages/server:/src
container 内部的结构会和你本地的不一样。尝试:
version: '3'
services:
server:
build: ./packages/server
volumes: - ./:/src
在 dockerfile 上:
FROM node:alpine
COPY . /src
WORKDIR /src
CMD ["node","packages/server/lib/index.js"]
希望对您有所帮助