当前位置: 首页 > 知识库问答 >
问题:

无法在Docker中编译typescript

壤驷英叡
2023-03-14

我想在node.js Web服务器中使用typescript。但是,Web服务器位于Docker容器中。我使用Dockerfile,就像使用blow:

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"]

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

共有3个答案

苏弘盛
2023-03-14

我认为问题在于sh-c。在控制台中键入sh-c echo test时,将没有输出。当您键入sh-c“echo test”或仅键入echo test时,它将起作用。这是因为只会执行第一个参数(查看mansh)。

但除此之外,这是没有必要的CMD[“rm”,“webApp.js”]将执行您想要的操作。如果希望它由bash/sh执行,可以使用字符串语法CMD rm webApp.js

鲜于仰岳
2023-03-14

好的开始!

您可以在我的GitHub Docker/NodeJS/Typescript初学者项目中查看我是如何实现这一点的

正如另一个答案所注意到的,您应该只使用一个CMD命令,所以您应该使用RUN sh-c tsc webApp.ts而不是使用那个CMD。这将使用以前安装在容器上的tsc命令行工具编译Typecript,该工具使用RUN npm安装-g typecript

执行此操作并运行Dockerfile后,您可能希望现在在您的工作文件夹(承载Dockerfile的文件夹)中看到webApp.js,但实际上您不会看到它。容器看到了,但你没有。发生什么事?

当您从Dockerfile运行这些命令时,实际上是在位于机器特殊隐蔽部分的容器中运行它们。机器的隐蔽部分和承载Dockerfile的部分是两个完全不同的位置。因此,您不会看到生成的.jshtml" target="_blank">文件。

谢天谢地,Docker有一种在机器的这两个部分之间“装载”或镜像文件的方法。这称为“卷”。

在卷上有一个很好的StackOverflow答案。卷语法与dockerfile中的类似:ADD/路径/内部/码头/集装箱。命令的结构如下:ADD{my_filepath}{container_filepath}。这意味着机器上位于{my_filepath}的任何内容现在都将被“装载”或镜像到路径{container_filepath}的容器中。

ADD会将当前工作目录装载到容器的主工作目录。

太叔栋
2023-03-14

在创建Dockerfile的最佳实践中,您应该只使用一个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"]
 类似资料:
  • 问题内容: 最近,我们公司迁移到Java 8(以前使用Java 7)。当我使用Eclipse时一切都很好,但是现在我切换到IntelliJ Idea 15(这是我第一次使用IntelliJ Idea),它根本不会编译任何Java 8代码(lambda等)。 我搜索了一个解决方案,发现必须在IntelliJ项目设置中将项目语言级别设置为8,但这仍然无济于事。 有任何想法吗? 问题答案: 确保您正确选

  • 我已安装以下软件包: 谷歌。戈朗。组织/grpc github。com/golang/protobuf/protoc gen go 导出的路径如下: 当我尝试用protoc命令编译proto文件时,我看到command not found错误: 我的项目路径如下:

  • 它是由以下方法调用引起的: 似乎with是从与期望的内容不明确,反之亦然。有办法解决吗?

  • 我下载了cratedb的源代码,但无法正确编译,下面是详细说明:jdk:1.8 /workspace/crate编译 应该是elasticsearch包不见了,下一步怎么办? 谢谢!

  • 我在我的源代码中使用Java10 API,当我尝试用maven和思想编译这段代码时,它会抛出一个错误: 我的环境: > JDK 10 Maven:3.6 想法 如果我删除这个API,我就没事了。 我确实遵循以下事情: < li >向pom添加编译器选项 将 IDEA 语言级别更改为 java10 文件- 以上两个不起作用。

  • 我正在为初学者做一个关于Udemy、JSP、Servlet和JDBC的课程:构建一个数据库应用程序,并在我的Tomcat9.0.27、XAMPP和Eclipse中遇到这个问题。我不确定错误是什么或在什么地方,我已经做了一个定制包,它被指示: Java包+Java类文件 JSP文件 类型异常报告 在jsp文件[/fun-test.jsp]中的行[7]处发生错误:无法解析FunUtils 4:5:6: