无法在Docker中编译打字稿

我想在我的node.js Web Server中使用打字稿。 但是,Web Sever位于Docker容器中。 我使用Dockerfile,如下所示:FROM node:latest

COPY code/ /usr/local/lib WORKDIR /usr/local/lib RUN npm install -g koa@2 RUN npm install -g sequelize RUN npm install -g mysql RUN npm install -g typescript CMD ["sh", "-c", "rm", "webApp.js"] CMD ["sh", "-c", "tsc", "webApp.ts"] CMD ["node", "webApp.js"] 

在构buildDocker之后,我发现在CMD命令之后不会生成webApp.js。 为什么,我该如何解决? 谢谢。

在创buildDockerfile的最佳实践中,您只能使用一个CMD和一个ENTRYPOINT

在你的情况下,它应该是:

 COPY code/ /usr/local/lib WORKDIR /usr/local/lib RUN npm install -g koa@2 RUN npm install -g sequelize RUN npm install -g mysql RUN npm install -g typescript RUN sh -c rm webApp.js RUN sh -c tsc webApp.ts CMD ["node", "webApp.js"] 

我认为问题是sh -c 。 当您在控制台中inputsh -c echo test ,将不会有输出。 当你inputsh -c "echo test"或者只有echo test它才能工作。 那是因为只有第一个参数会被执行(看看man sh )。

但除此之外,这是没有必要的。 CMD ["rm", "webApp.js"]将做你想要的。 如果你想让它被bash / sh执行,你可以使用string语法CMD rm webApp.js