【问题标题】:Unable to run docker image, Docker looking for different extension无法运行 docker 镜像,Docker 正在寻找不同的扩展
【发布时间】:2020-05-19 21:46:30
【问题描述】:

我有以下 Dockerfile:

# Use NodeJS base image
FROM node:12

# Create app directory
#RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)

COPY package*.json /usr/src/app/
COPY src/. /usr/src/app # this is to copy contents of src/ one level up otherwise they aren't recognised

RUN npm install
# Bundle app source
COPY . /usr/src/app/  
#RUN rm -f /usr/src/app/src/*

EXPOSE 8080

# Define the Docker image's behavior at runtime
CMD ["node", "server.js"]

但是在构建成功后运行 docker 镜像时,会出现以下错误:

internal/modules/cjs/loader.js:965
throw err;
^

Error: Cannot find module '/usr/src/app/server.js'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:962:15)
    at Function.Module._load (internal/modules/cjs/loader.js:838:27)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
    at internal/main/run_main_module.js:17:47 {
 code: 'MODULE_NOT_FOUND',
 requireStack: []
}

因为我有一个 server.ts 文件,而 docker 正在以某种方式寻找 server.js。在更改扩展名时,它无法导入其他打字稿文件。下面是我的 server.ts:

import cors from 'cors';
import express from 'express';
import {sequelize} from './sequelize';

import {IndexRouter} from './controllers/v0/index.router';

import bodyParser from 'body-parser';
import {config} from './config/config';
import {V0_FEED_MODELS} from './controllers/v0/model.index';


(async () => {
  await sequelize.addModels(V0_FEED_MODELS);
  //await sequelize.addModels(V0_USER_MODELS);
  await sequelize.sync();

  const app = express();
  const port = process.env.PORT || 8080;

  app.use(bodyParser.json());

  app.use(cors({
    allowedHeaders: [
      'Origin', 'X-Requested-With',
      'Content-Type', 'Accept',
      'X-Access-Token', 'Authorization',
    ],
    methods: 'GET,HEAD,OPTIONS,PUT,PATCH,POST,DELETE',
    origin: config.url,
  }));

  app.use('/api/v0/', IndexRouter);

  // Root URI call
  app.get( '/', async ( req, res ) => {
    res.send( '/api/v0/' );
  } );


  // Start the Server
  app.listen( port, () => {
    console.log( `server running ${config.url}` );
    console.log( `press CTRL+C to stop server` );
  } );
})();

为什么 docker 会自动获取 server.js?我在哪里可以配置 docker 来做其他事情?

【问题讨论】:

  • 这是获取 server.js 的地方:CMD ["node", "server.js"]
  • 你已经设置了工作目录,复制源代码时不需要再次指定完整路径,复制命令的目的地只能是一个点。

标签: javascript typescript docker containers


【解决方案1】:
FROM node:12
WORKDIR /usr/src/app
COPY . .
RUN npm install
EXPOSE 8080
CMD ["node", "server.js"] 

我认为这就是你想要做的。它应该可以正常工作。如果你想做其他事情,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 2020-10-06
    相关资源
    最近更新 更多