两个docker-compose文件在Linux下不能同时执行



我最近使用DOCKERdocker-compose容器化了我朋友的NODE项目

package.json

{
  "name": "moviesapi",
  "version": "1.0.0",
  "description": "A moviesApI to handle movie search request of the customers",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "test": "mocha test/**/*.intg.js --exit",
    "dev": "nodemon index.js"
  },
  "author": "Flanker",
  "license": "ISC",
  "dependencies": {
    "bcrypt": "^5.1.0",
    "body-parser": "^1.20.0",
    "config": "^3.3.8",
    "cors": "^2.8.5",
    "dotenv": "^16.0.3",
    "express": "^4.18.1",
    "express-async-errors": "^3.1.1",
    "express-fileupload": "^1.4.0",
    "fawn": "^2.1.5",
    "file-upload": "^0.0.0",
    "helmet": "^6.0.0",
    "joi": "^17.6.3",
    "joi-objectid": "^4.0.2",
    "joi-password-complexity": "^5.1.0",
    "jsonwebtoken": "^8.5.1",
    "lodash": "^4.17.21",
    "mongodb": "^4.10.0",
    "mongoose": "^6.6.5",
    "router": "^1.3.7",
    "winston": "^3.8.2",
    "winston-mongodb": "^3.0.2"
  },
  "devDependencies": {
    "chai": "^4.3.6",
    "mocha": "^10.1.0",
    "nodemon": "^2.0.20",
    "supertest": "^6.3.0"
  }
}

Dockerfile看起来像

FROM node:16
ENV NODE_ENV=production
WORKDIR /usr/src/app
ARG NODE_ENV=devlopment
ENV PORT=3000
COPY package*.json ./
RUN if [ "$NODE_ENV" = "production" ]; then npm ci --only=production; else npm install; fi
COPY . .
EXPOSE ${PORT}
RUN chown -R node /usr/src/app
USER node
CMD ["node", "index.js"]

docker-compose.yml

version: '3.4'
services:
  app:
    image: moviesapi
    build:
      context: .
      dockerfile: ./Dockerfile
      args:
        - NODE_ENV=production
    environment:
      - NODE_ENV=production
      - PORT=3000
      - MONGO_URL=mongodb://mongo-db:27017/
    ports:
      - 3000:3000
    depends_on:
      - mongo-db
    
  mongo-db:
    image: mongo
    ports:
      - 27017:27017
    volumes:
      - moviesapi-mongo-data:/data/db
volumes:
  moviesapi-mongo-data:

对于开发环境,docker-compose.dev.yml

version: '3.4'
services:
  app:
    image: moviesapi
    build:
      context: .
      dockerfile: ./Dockerfile
      args:
        - NODE_ENV=devlopment
    environment:
      - NODE_ENV=devlopment
      - moviesApi_jwtPrivateKey=example_moviesApi_jwtPrivateKey
    ports:
      - 3000:3000
    volumes:
      - ./:/usr/src/app
      - /usr/src/app/node_modules
    command: npm run dev

在我的Windows机器上,当我运行docker-compose -f docker-compose.yml -f docker-compose.dev.yml up --build -d它在PowerShellWSL Ubuntu

中都工作得很好。但是当我在我朋友的电脑上运行同样的命令时,这是一个Ubuntu系统。日志提示nodemon不存在,绑定挂载也没有连接到容器。

所以我猜docker-compose.dev.yml没有使用这个命令执行,只有docker-compose.yml正在执行。不知道为什么。

您的docker-compose.dev.yml文件第10行有一个错别字。

args:
        - NODE_ENV=devlopment

因为这个,他可能会回到默认的环境,不会安装devDependencies。

最新更新