简体   繁体   中英

Monorepo Shared Package not Found when Running Docker-Compose

I have a monorepo set up with lerna and yarn workspaces . Everything is written in typescript and compiled into javascript.

But there is an issue with sharing packages when running the monorepo via docker-compose .

I've created a small repo, which mimics the behavior: https://github.com/skatestyle/stackoverflow-monorepo-dependencies .


Basically there is a @root/common and a @root/server package. The server imports the common . Everything works fine when running node packages/server/lib/index.js . ( Please note, that you need to run yarn bootstrap and yarn build before starting )

But when running my docker-compose file via docker-compose up --build , I get the following error:

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  | }

And yes, I need to use docker-compose , because my real project has more servers running.

The error probably lies in my Dockerfile or docker-compose.yml , but I can't find it.

Thanks in advance for every help!

On you docker-compose you create volume

./packages/server:/src

The structure inside container will be different to your local. try :

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

and on dockerfile:

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

Hope it helps

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM