I am struggling for a quite some time making a node.js app to be accessible over Internet. The docker container is running on a port 9000. The host machine is an Oracle Linux virtual machine one, on the Oracle Cloud. I have enabled the port 9000 there.
In the container I run the node.js app with:
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
Check the docker container process from within the Oracle Linux host: docker ps
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
And testing the connection on the host is giving back the error:
[opc@instance-20210318-1902 ~]$ curl http://public.ip:9000/api/home
curl: (7) Failed connect to public.ip:9000; Connection refused
The content of the 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" ]
What else should be done so the node.js app is reachable over Internet?
Kind regards, Dime
It looks like you haven't mapped port 9000 in the container to port 9000 on the host when you started the container.
The 'Ports' section of the docker ps
display looks like this
PORTS
9000/tcp
but should look like this
PORTS
0.0.0.0:9000->9000/tcp
You map the port by adding -p 9000:9000
as a parameter on the docker run
command (before the image name). This maps port 9000 on the host to port 9000 in the container, so it's reachable.