【发布时间】:2018-10-19 04:43:07
【问题描述】:
设置 - 我有一个在 docker 容器内运行的简单服务器。 Dockerfile:
web:
image: my_web
build:
context: ./
dockerfile: web.docker
container_name: my_web
networks:
- front
ports:
- "4200:4200"
- "4300:4300"
volumes:
- www:/var/www
- wwwlogs:/var/www/storage/logs
env_file:
- ${SERVICE_ENVIRONMENT}.env
web.docker:
# start build from node:latest
FROM node:latest
MAINTAINER me <info@example.com>
# Install system-wide dependencies
RUN apt-get -yqq update
... some unimportant setup stuff ...
USER me
# expose port
EXPOSE 4200
WORKDIR /me
## Run server
CMD ["/bin/bash", "-c", "ng serve --proxy-config projects/my-ui/src/environments/proxy.conf-local.json --hmr"]
这一切都有效。服务器上来了
...
** Angular Live Development Server is listening on localhost:4200, open your browser on http://localhost:4200/ **
...
从容器内部我可以很好地使用服务:
> docker exec -u 0 -it my_web /bin/bash
root@621da3c6697f:/me# curl localhost:4200
<!doctype html>
<html>
<head>
...
但是,从容器(OSX 主机)外部,我得到一个空响应:
> curl localhost:4200
curl: (52) Empty reply from server
我认为这与 docker 网络没有任何直接关系。我设置了其他响应良好的 API 服务。我还登录了 web 容器,并用 python 启动了一个简单的 web 服务器:
me@621da3c6697f:/me# python -m SimpleHTTPServer 4300
Serving HTTP on 0.0.0.0 port 4300 ...
我可以从主持人那里得到很好的结果:
> curl localhost:4300
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><html>
<title>Directory listing for /</title>
<body>
<h2>Directory listing for /</h2>
<hr>
...
服务器吐出一条访问日志行:
172.22.0.1 - - [18/Oct/2018 19:56:59] "GET / HTTP/1.1" 200 -
我也改变了一些东西,让简单的 HTTP 服务器在端口 4200 上运行,但这并没有什么不同。
我认为这与 npm 如何绑定到主机有关(仅侦听对 127.0.0.1 或类似的请求),但对于我的生活,我无法弄清楚。任何人对进一步调试或更改 npm 绑定地址的方式有任何建议吗?
--- 编辑---
在没有运行任何东西的情况下访问端口也有区别。来自主持人:
> curl localhost:4000
curl: (7) Failed to connect to localhost port 4000: Connection refused
> curl localhost:4200
curl: (52) Empty reply from server
所以它肯定会命中绑定到 4200 的东西,只是服务器拒绝提供任何内容......
【问题讨论】:
-
我不确定你的意思是“npm”。
-
我承认,Angular 堆栈不是我的强项。但是我用“npm run start-local”启动服务器,这就是我指定 npm 的原因。这又扩展为“ng serve --proxy-config projects/xform-ui/src/environments/proxy.conf-local.json --hmr”(这是我现在直接编码到我的 docker 文件中的内容)。这应该在 Node 中结束吗?角度?
标签: angular docker npm docker-compose