【问题标题】:How to expose port to external host in docker?如何在docker中向外部主机公开端口?
【发布时间】:2021-01-29 21:47:45
【问题描述】:

我正在尝试在 docker 容器中公开一个端口,并尝试从外部主机连接应用程序但我无法连接。

卷曲请求:

curl http://localhost:4400
curl: (56) Recv failure: Connection reset by peer

运行命令:

docker run -p 4400:3002  dev/my-node-app

Dockerfile:

FROM ubuntu:20.04

RUN apt-get update; \
    apt-get install -y curl gnupg; \
    curl -sL https://deb.nodesource.com/setup_10.x | bash -; \
    apt-get install -y nodejs; \
    rm -rf /var/lib/apt/lists/*

WORKDIR /usr/src/app

COPY . .

EXPOSE 3002

ENTRYPOINT ["npm", "run", "server:dev"]

也在Dockerfile下面试过

FROM node:12.19.0

# Create app directory
WORKDIR /usr/src/app

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./

RUN npm install
# If you are building your code for production
# RUN npm ci --only=production

# Bundle app source
COPY . .

EXPOSE 3002
CMD ["npm", "run", "server:dev"]

但现在出现错误:

Module build failed: Error: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /usr/src/app/node_modules/node-sass/vendor/linux-x64-64/binding.node)

我认为我运行正确,但不知何故我的 Dockerfile 中有错误,如果有人帮助我,我将不胜感激。

谢谢

【问题讨论】:

  • 您是否已经检查了容器日志以查看节点服务是否正在运行?
  • 而且我建议你用ubuntu 镜像替换node 镜像,像ubuntu 这样的bit image 使用不是一个好习惯。您可以将步骤FROM ubuntu:20.04RUN apt-get update; ... 替换为FROM node:12.19.0
  • @everacosta 嗨,我这样做了,但那样我得到了错误:模块构建失败:错误:/lib/x86_64-linux-gnu/libm.so.6:版本“GLIBC_2.29”未找到(/usr/src/app/node_modules/node-sass/vendor/linux-x64-64/binding.node 需要)
  • 完美,问题出在 RUN 步骤中,您可以尝试用 FROM node:12.19.0 替换那 2 步吗
  • 更新了问题中的 Dockerfile,出现错误,因此无法测试 :(

标签: node.js docker ubuntu npm


【解决方案1】:
curl http://localhost:4400
curl: (56) Recv failure: Connection reset by peer

表示端口不指向应用程序。

应用程序指向 127.0.0.1,它应该指向 Docker 内部的 0.0.0.0。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 2020-05-23
    • 2020-08-26
    • 1970-01-01
    • 2018-05-26
    • 2016-07-26
    • 2019-06-12
    相关资源
    最近更新 更多