当前位置: 首页 > 面试题库 >

ng服务在Docker容器中不起作用

杜砚
2023-03-14
问题内容

我有这个Docker Compose配置,我只需创建一个NodeJS容器并在其中安装Angular CLI。

之后docker-compose up -d,我可以使用SSH在容器内进行SSH docker-compose run node bashng new可以正常工作,但ng serve似乎不起作用。它已正确启动,控制台中没有错误。但是,如果我访问localhost(我将端口4200映射到80),则不会加载任何内容。

我想念什么吗?


问题答案:

在您的Dockerfile中,您缺少Expose行,例如:

EXPOSE 4200

尝试将其放在docker文件中的最后一个RUN命令之前。

该行显示了容器本身中的端口(在这种情况下为4200),因此来自compose的映射起作用(80:4200)。

Compose只是这样做:将80从主机转发到容器中的4200。但是它并不知道或不在乎4200是否正在被收听。dockerfile中的Expose可确保何时构建映像,以便为将来运行的容器公开此端口,以便您的ng服务可以收听它。

解析度

因此,要获取所需的内容docker-compose run,请使用publish发布端口。由于run不使用您的映射docker- compose.yml,因此会忽略它们。所以像这样使用它:

docker-compose run --publish 80:4200 node bash

然后创建有角度的应用程序,然后按您的方式启动它。

测试示例以供将来参考

cd tmp (或任何可写文件夹)

ng new myProject

cd myProject

ng serve --host 0.0.0.0 (–host 0.0.0.0监听容器中的所有接口)

然后在浏览器中,转到localhost,您将看到角度欢迎页面,因为端口4200已发布,并80通过如上所示的publish命令绑定到主机端口。

每次遇到端口转发问题时,如果打开一个新终端,将另一个终端保留在执行原始终端的位置run command并运行,则docker ps您会在“端口”列中看到以下内容:

0.0.0.0:80->4200/tcp 这意味着端口80上的主机已成功转发到端口4200中的容器。

如果看到类似4200/tcp而不是该->部分的内容,则表示没有发布任何映射或端口。



 类似资料:
  • 我想在从Debian官方Docker中心仓库派生的docker容器中执行ps命令:

  • 解决方案:docker检查|grep IP获取运行容器ip的postgres,并分别用容器的ip和port更新您的envDB_HOST和DB_PORT。 更新:由于ip地址可能会更改,因此将postgres写入DB_主机是最佳做法。 我一直在寻找一天的时间将数据库从docker容器连接到我的Laravel应用程序,但无论我做了什么尝试,即使我可以通过Postco连接,我也无法迁移我的数据库。我得到

  • 我正在使用Spring Cloud创建微服务架构。 我正在使用Spring Cloud中的以下功能 Zuul–API网关服务,提供动态路由、监控、弹性、安全等功能- 功能区–客户端负载平衡器 Faign–声明性REST客户端 Eureka–服务注册和发现 Sleuth–通过日志进行分布式跟踪 Zipkin–具有请求可视化的分布式跟踪系统 Hystrix-适用于所有API的断路器、容错、Hystri

  • 我有一个php docker容器,我的Symfony项目在哪里。 这是我的docker-compose.yml 我想使用以下命令启动我的symfony项目: 但当我想访问url时,它不起作用。我收到以下错误消息: localhost页不行 localhost未发送任何数据。 我该怎么解决这个问题? PS:我用docker for mac 和输出: [2016-08-06 14:09:53]php.

  • 问题内容: 在我的Dockerfile中,我试图安装多个服务,并希望在启动容器时使它们全部自动启动。服务之一是mysql,当我启动容器时,我看不到mysql服务正在启动。当我尝试手动启动时,出现错误: Dockerfile: 我的start.sh文件: Docker构建: Docker运行: 我检查了图像,也无济于事。如何使用通过systemctl / service命令启动的服务启动容器。 问题

  • 在我的Dockerfile中,我试图安装多个服务,并希望在启动容器时使它们都自动启动。其中一个服务是mysql,当我启动容器时,我没有看到mysql服务启动。尝试手动启动时,出现错误: DockerFile: 我已经检查了映像,但这也没有帮助。如何用使用systemctl/service命令启动的服务启动容器。