运行Docker-Compose时找不到Monorepo共享软件包

时间:2019-06-18 20:14:25

标签: typescript docker docker-compose monorepo yarn-workspaces

我有一个用lerna和纱线workspaces设置的monorepo。 一切都用打字稿写成,并编译成javascript。

但是通过docker-compose运行monorepo时,共享软件包存在问题。

我创建了一个小型仓库,模仿了以下行为:https://github.com/skatestyle/stackoverflow-monorepo-dependencies


基本上有一个@root/common和一个@root/server软件包。 server导入common。运行node packages/server/lib/index.js时一切正常。 (请注意,您需要先运行yarn bootstrapyarn 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 stackoverflow-monorepo-dependecies_server:latest
Starting stackoverflow-monorepo-dependecies_server_1 ... done
Attaching to stackoverflow-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,因为我的真实项目正在运行更多的服务器。

错误可能出在我的Dockerfiledocker-compose.yml上,但我找不到它。

在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

在您的docker-compose上创建卷

  

./ packages / server:/ src

容器内的结构将与您的本地不同。尝试:

version: '3'
services: 
   server: 
      build: ./packages/server 
      volumes: - ./:/src 

和dockerfile上

FROM node:alpine
COPY . /src
WORKDIR /src
CMD ["node","packages/server/lib/index.js"]

希望有帮助