Node.js docker 容器中的应用无法通过互联网访问 "Connection refused"

Node.js app in a docker container not reachable over Internet "Connection refused"

我努力了很长一段时间才能使 node.js 应用程序可以通过 Internet 访问。 docker 容器在端口 9000 上 运行ning。 宿主机是一个 Oracle Linux 虚拟机,在 Oracle Cloud 上。我在那里启用了端口 9000。

在容器中,我 运行 node.js 应用具有:

sh-4.2# node index.js
Starting application
Initializing database module
libDir = /usr/lib/oracle/19.3/client64/lib
Initializing web server module
Web server listening on Host:0.0.0.0, Port:9000

从 Oracle Linux 主机中检查 docker 容器进程: dockerps

CONTAINER ID        IMAGE                          COMMAND             CREATED              STATUS              PORTS               NAMES
8504964aa23c        227d64c853db/domaevid-server   "sh"                About a minute ago   Up About a minute   9000/tcp            mystifying_babbage

在主机上测试连接返回错误:

[opc@instance-20210318-1902 ~]$ curl http://public.ip:9000/api/home
curl: (7) Failed connect to public.ip:9000; Connection refused

Dockerfile的内容:

FROM oraclelinux:7-slim

WORKDIR /usr/src/app
COPY package*.json ./

RUN  yum -y install oracle-release-el7 && \
    yum -y install oracle-instantclient19.3-basiclite && \
    yum -y install oracle-nodejs-release-el7 && \
    yum-config-manager --disable ol7_developer_EPEL && \
    yum install vim-enhanced -y && \ 
    yum -y install nodejs && \
    npm install && \
    rm -rf /var/cache/yum
RUN echo "export xxx" >> ~/.bashrc && \
    echo "export xxx" >> ~/.bashrc && \
    echo "export xxx" >> ~/.bashrc && \
    echo "export xxx" >> ~/.bashrc && \
    echo "export xxx" >> ~/.bashrc
RUN source ~/.bashrc 
COPY /_docker/ORACLE/NETWORK/ADMIN/* /usr/lib/oracle/19.3/client64/lib/network/admin 

COPY . .

EXPOSE 9000
CMD [ "node", "index.js" ]

还应该做什么才能使 node.js 应用程序可以通过 Internet 访问?

亲切的问候, 一角硬币

您在启动容器时似乎没有将容器中的端口 9000 映射到主机上的端口 9000。

docker ps 显示的 'Ports' 部分如下所示

PORTS
9000/tcp

但应该是这样的

PORTS
0.0.0.0:9000->9000/tcp

您可以通过添加 -p 9000:9000 作为 docker run 命令的参数(在图像名称之前)来映射端口。这会将主机上的端口 9000 映射到容器中的端口 9000,因此可以访问。