我有这个Docker Compose配置,我只需创建一个NodeJS容器并在其中安装Angular CLI。
之后docker-compose up -d
,我可以使用SSH在容器内进行SSH docker-compose run node bash
。ng 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命令启动的服务启动容器。