无法通过Docker映射的端口访问Docker容器

5
我已经创建了一个Docker容器,但是无法在Docker映射的端口上运行它(http://localhost:3000)。以下是我在应用程序中使用的Docker配置的详细信息。
Docker版本:17.05.0-ce 操作系统:Ubuntu 16.04
我的Dockerfile:
FROM node:boron
# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY   . /usr/src/app

RUN     npm install -g bower 
RUN     npm install -g grunt-cli
RUN     npm install 
RUN     bower install --allow-root
#RUN     grunt --force
EXPOSE 3000
CMD     ["grunt", "serve"]

创建 Docker 容器:
docker build -t viki76/ng-app .

运行容器:

docker run  -p 3000:3000 -d viki76/ng-app

docker ps:

CONTAINER ID   IMAGE         COMMAND       CREATED    STATUS     PORTS  

21541171d884   viki/ng-app   "grunt serve"  10 min ago Up    0.0.0.0:3000->3000/tcp

编辑:

更新了Dockerfile配置

EXPOSE 9000

$ docker run -p 9000:9000 viki76/ng-app

Running "serve" task

Running "clean:server" (clean) task
>> 1 path cleaned.

Running "wiredep:app" (wiredep) task

Running "wiredep:test" (wiredep) task

Running "concurrent:server" (concurrent) task

Running "copy:styles" (copy) task
Copied 2 files

Done, without errors.


Execution Time (2017-05-17 13:00:13 UTC-0)
loading tasks               189ms  ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 88%
loading grunt-contrib-copy   11ms  ▇▇ 5%
copy:styles                  16ms  ▇▇▇ 7%
Total 216ms

Running "postcss:server" (postcss) task
>> 2 processed stylesheets created.

Running "connect:livereload" (connect) task
Started connect web server on http://localhost:9000

Running "watch" task
Waiting...

从Gruntfile.js文件

connect: {
  options: {
    port: 9000,
    // Change this to '0.0.0.0' to access the server from outside.
    hostname: '0.0.0.0',
    livereload: 35729
  },

请帮我修复它。 谢谢

3个回答

2
我认为你的问题在于grunt绑定到了localhost:9000 - 这是容器内部的地址,因此你发布的端口不会产生任何效果。
它需要监听0.0.0.0:9000 - 我无法立即告诉你你的Gruntfile.js应该如何设置,但乍一看,似乎默认情况下,grunt serve只会从localhost提供服务。

// 实际的Grunt服务器设置 connect: { options: { port: 9000, // 将此更改为“0.0.0.0”以从外部访问服务器。 hostname: '0.0.0.0', livereload: 35729 } 我已将localhost更改为0.0.0.0 - Varun Nayyar
啊,太好了(可能值得再次编辑您的问题以包括这一点)。 问题还在吗?如果是这样,如果您尝试curl http://your-server-name:9000会发生什么? - otupman
我刚刚更新了我的问题。 curl http://localhost:9000 输出: curl: (56) 接收失败:连接被对等方重置 - Varun Nayyar
1
好的,当您在运行docker命令时添加了hostname:'0.0.0.0',现在connect:livereload会显示什么?即以前它会显示Started connect web server on http://localhost:9000,但现在会显示什么? - otupman
它正在说相同的内容,已经在 http://localhost:9000 上启动连接 Web 服务器。 我明白你的意思。我会修复它。 - Varun Nayyar
它正从缓存中获取图像。我删除了该图像并重新构建了它。非常感谢。 :) - Varun Nayyar

0

你做得很好,但我认为你的问题只是配置问题。

默认情况下,grunt-serve 服务于9000端口,而不是3000端口。你想尝试 EXPOSE 并发布该端口吗?


我更新了我的配置文件,加入了“EXPOSE 9000”,并尝试在9000端口上运行应用程序,但是它没有工作。请检查我的修改。 - Varun Nayyar

0
尝试在主机模式下运行该容器:
--net="host"

在运行容器时,请传递上述内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接