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,因此可以访问。
我努力了很长一段时间才能使 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,因此可以访问。