Angular 5应用程序无法通过网络或docker外部访问

Angular 5应用程序无法通过网络或docker外部访问,angular,docker,Angular,Docker,我有一个工作Angular 5应用程序,我正在努力使其与docker compose一起工作 虽然很多人都遇到过类似的问题,但建议的解决方案并不适合我: 这是我的docker-compose.yml version: '3' services: webui-ng: container_name: bcrm-webui-ng build: ./webui-angular ports: - 4200:4200 下面是Docker文

我有一个工作Angular 5应用程序,我正在努力使其与docker compose一起工作

虽然很多人都遇到过类似的问题,但建议的解决方案并不适合我:

这是我的docker-compose.yml

version: '3'
services:

  webui-ng:
     container_name: bcrm-webui-ng
     build: ./webui-angular   
     ports: 
      - 4200:4200 
下面是Docker文件,位于./webui下

FROM node:9.6.1

# Create app directory
WORKDIR /usr/src/app

COPY package*.json ./

# Install app dependencies
RUN npm install

# Bundle app source
COPY . .

# Expose API port to the outside
EXPOSE 4200

# Launch application
#CMD ["npm","run ng serve"]
#CMD ["npm", "run", "ng", "serve", "--host", "0.0.0.0"]
#CMD ["npm", "run", "ng", "serve", "--host", "0.0.0.0", "--port", "4200"]
#ENTRYPOINT ["npm", "run", "ng", "serve", "--open", "--host", "0.0.0.0", "--port", "4200"]
CMD npm run ng serve --host 0.0.0.0
请注意,最后一行上注释的所有命令都不起作用。也就是说,当我打开Firefox时,我总是在Firefox中出现“连接被重置”错误

下面是命令行输出

bcrm-webui-ng | 
bcrm-webui-ng | > Xyz@0.1.0 ng /usr/src/app
bcrm-webui-ng | > ng "serve" "0.0.0.0"
bcrm-webui-ng | 
bcrm-webui-ng | ** NG Live Development Server is listening on localhost:4200, open your browser on http://localhost:4200 **
bcrm-webui-ng | Date: 2018-09-24T14:03:38.509Z                                                           
bcrm-webui-ng | Hash: 4ac012def02ed7e0a08a
bcrm-webui-ng | Time: 19848ms
bcrm-webui-ng | chunk {inline} inline.bundle.js, inline.bundle.js.map (inline) 5.83 kB [entry] [rendered]
bcrm-webui-ng | chunk {main} main.bundle.js, main.bundle.js.map (main) 1.81 MB {vendor} [initial] [rendered]
bcrm-webui-ng | chunk {polyfills} polyfills.bundle.js, polyfills.bundle.js.map (polyfills) 221 kB {inline} [initial] [rendered]
bcrm-webui-ng | chunk {styles} styles.bundle.js, styles.bundle.js.map (styles) 28.2 kB {inline} [initial] [rendered]
bcrm-webui-ng | chunk {vendor} vendor.bundle.js, vendor.bundle.js.map (vendor) 4.25 MB [initial] [rendered]
bcrm-webui-ng | 
bcrm-webui-ng | webpack: Compiled successfully.

您的docker没有获得第一次获得的
端口
地址。每次运行
而不是
启动
docker时都会发生这种情况。它只是将
4200
端口与第一个容器绑定(如果运行
docker ps-a
,您将看到该容器)

解决办法是

  • 在运行docker compose之前删除先前的容器
  • 每次编写docker时都要进行docker检查
  • 为容器设置名称,以便docker compose会警告您不要创建重复的容器。可以使用docker run命令中的
    --name
    完成此操作

您可以选择其中一个。

进一步调查后,我发现问题不在docker端,而是以下命令不起作用

npm run ng serve --host 0.0.0.0 --disable-host-check 
但只有通过运行才能很好地工作

ng serve --host 0.0.0.0 --disable-host-check 

您在第一次成功执行docker compose时是否遇到过此问题?还是后续发行?后续发行。我试了很多次,谢谢你的回答。我做了SudoDockerRM$(DockerPS-a-q),然后再次运行SudoDockerCompose-up-build。现在sudo docker ps提供了以下输出,显示图像再次创建,但我仍然面临同样的问题。容器ID映像命令已创建状态端口名称b0a265094568 source_webui-ng“/bin/sh-c“npm run…”大约一分钟前上升58秒0.0.0.0:4200->4200/tcp bcrm webui与您的问题相同,在容器上执行
docker检查
(使用
id
name
),查看它当前在哪个ip上运行。如果你想把你的docker和ip永久捆绑在一起,你需要管道。但是,在执行此操作之前,您需要命名容器,因为pipeworks命令需要一个名称。