无法从 docker 映射的端口访问 docker 容器
Unable to access docker container from the port mapped by docker
我创建了一个 docker 容器,但无法在 docker (http://localhost:3000) 映射的端口上 运行 它。以下是我在我的应用程序中使用的 docker 配置的详细信息。
Docker 版本:17.05.0-ce
Os : ubuntu 16.04
我的Docker文件:
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
编辑:
已更新Docker文件配置
EXPOSE 9000
$ docker 运行 -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
},
请帮我解决一下。
谢谢
你做的一切都很好,虽然我假设你的问题只是配置问题。
默认情况下,grunt-serve
在端口 9000 上提供服务,而不是 3000。要尝试 EXPOSE
并发布该端口吗?
我认为你的问题是 grunt 绑定到 localhost:9000 - 这是容器内部的,所以你发布的端口不会有任何影响。
它需要在 0.0.0.0:9000 上收听 - 我无法直接告诉你你的 Gruntfile.js
应该说什么才能发生,但是看起来,从框,grunt serve 将仅从本地主机提供服务。
尝试 运行在主机模式下连接容器:
--net="host"
当你 运行 容器时通过以上。
我创建了一个 docker 容器,但无法在 docker (http://localhost:3000) 映射的端口上 运行 它。以下是我在我的应用程序中使用的 docker 配置的详细信息。
Docker 版本:17.05.0-ce
Os : ubuntu 16.04
我的Docker文件:
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
编辑:
已更新Docker文件配置
EXPOSE 9000
$ docker 运行 -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
},
请帮我解决一下。 谢谢
你做的一切都很好,虽然我假设你的问题只是配置问题。
默认情况下,grunt-serve
在端口 9000 上提供服务,而不是 3000。要尝试 EXPOSE
并发布该端口吗?
我认为你的问题是 grunt 绑定到 localhost:9000 - 这是容器内部的,所以你发布的端口不会有任何影响。
它需要在 0.0.0.0:9000 上收听 - 我无法直接告诉你你的 Gruntfile.js
应该说什么才能发生,但是看起来,从框,grunt serve 将仅从本地主机提供服务。
尝试 运行在主机模式下连接容器:
--net="host"
当你 运行 容器时通过以上。