【问题标题】:How to access Docker container app on local?如何在本地访问 Docker 容器应用程序?
【发布时间】:2019-06-06 19:53:20
【问题描述】:

我有一个简单的 Node.js/Express 应用程序:

const port = 3000

app.get('/', (req, res) => res.send('Hello World!'))

app.listen(port, () => console.log(`Example app listening on port ${port}!`))

当我启动它时它工作正常:node src/app.js

现在我正在尝试在 Docker 容器中运行它。 Dockerfile 是:

FROM node:8

WORKDIR /app
ADD src/. /app/src
ADD package.json package-lock.json /app/

RUN npm install

COPY . /app

EXPOSE 3000

CMD [ "node", "src/app.js" ]

一切正常:docker run <my image>:

Listening on port 3000

但现在我无法在浏览器中访问它: http://localhost:3000

This site can’t be reached localhost refused to connect.

如果我尝试在 docker-compose 中运行它,也会发生同样的情况:

version: '3.4'

services:
  service1:
    image: xxxxxx
    ports:
      - 8080:8080
    volumes:
      - xxxxxxxx
  myapp:
    build: 
      context: .
      dockerfile: Dockerfile
    networks:
      - private
    ports:
      - 3000
    command:
      node src/app.js

不确定我是否正确处理了两个 docker 文件中的端口

【问题讨论】:

  • 如果发布端口没有像提到的其他答案那样有帮助,并且如果您使用的是 MacOS,请尝试:app.listen(port, '0.0.0.0', () => console.log(`Example app而是在端口 ${port}!`)) 上监听。

标签: node.js docker docker-compose


【解决方案1】:

使用 docker 时,您必须将应用的主机定义为 0.0.0.0 而不是 localhost

对于您的快速应用程序,您可以在app.listen 调用上定义主机。

检查documentationapp.listen([port[, host[, backlog]]][, callback])

您的快速代码应更新为:

const port = 3000
const host = '0.0.0.0'

app.get('/', (req, res) => res.send('Hello World!'))

app.listen(port, host, () => console.log(`Example app listening on ${port}!`))

发布 docker 端口也很重要:

  • 运行泊坞窗:docker run -p 3000:3000 <my image>
  • 运行 docker-compose:
services:
  myapp:
    build: 
      context: .
      dockerfile: Dockerfile
    networks:
      - private
    ports:
      - 3000:3000
    command:
      node src/app.js

【讨论】:

    【解决方案2】:

    试试这个:

    services:
      myapp:
        build: 
          context: .
          dockerfile: Dockerfile
        networks:
          - private
        ports:
          - 3000:3000 ##THIS IS THE CHANGE, YOU NEED TO MAP MACHINE PORT TO CONTAINER
        command:
          node src/app.js
    

    【讨论】:

      【解决方案3】:

      你需要发布端口

      docker run -p 3000:3000 <my image>
      

      -p - 代表发布

      【讨论】:

        猜你喜欢
        • 2020-02-10
        • 2017-10-26
        • 1970-01-01
        • 1970-01-01
        • 2019-03-09
        • 1970-01-01
        • 1970-01-01
        • 2022-12-18
        • 2022-11-13
        相关资源
        最近更新 更多