I have a container with several ports. I want remote access to the port 9001
outside of the container.
172.17.0.1
172.19.0.23
192.168.1.131
I have searched about this issue and I found the expose
and ports
attributes for ports forwarding but it did not work.
How to expose docker ports to make your containers externally accessible
Reference
This is my docker-compose
file:
version: '3'
services:
nginx:
image: nginx:latest
container_name: nginx
ports:
- "8010:8010"
volumes:
- .:/code
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
links:
- ivms
restart: unless-stopped
ivms:
build: .
container_name: ivms
command: bash bashes/createDB.sh
volumes:
- .:/code
expose:
- "8010"
- "9001"
ports:
- "9001:9001"
Here's the code snippet inside the ivms
container:
import zmq
if __name__ == '__main__':
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.setsockopt(zmq.SUBSCRIBE, "")
socket.bind("tcp://192.168.1.131:9001") # doesn't work with server or docker IP
while True:
data = socket.recv_json()
I run the above docker-compose
via docker-compose up -d
server_IP:9001
which is 192.168.1.131:9001
or
docker_IP:9001
which is 172.17.0.1:9001
can not access either the remote or local mode.container_IP:9001
which is 172.19.0.23:9001
this
works in local.What should I do so that I can have access the server_IP:9001 --> 192.168.1.131:9001
?
[NOTE]:
In createDB.sh
runs several operations such as creating a ZMQ on
9001
port.
I have been set the port allowing before, using $ ufw allow 9001
I tried on Ubuntu 16.04 and Ubuntu-Server 16.04
Any help would be appreciated.
The problem has been resolved with the below instruction:
In the ZMQ app (in ivms
container) I had used the server's IP to bind the IP and port to establish the connection:
import zmq
if __name__ == '__main__':
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.setsockopt(zmq.SUBSCRIBE, "")
socket.bind("tcp://192.168.1.131:9001") # doesn't work with server or docker IP
while True:
data = socket.recv_json()
It was working only as below:
socket.bind("tcp://192.168.1.131:9001") # works, but can't access as remote
socket.bind("tcp://*:9001") # Works both locally and remotely.
And this is my docker-compose.yml
configuration:
version: '3'
services:
nginx:
image: nginx:latest
container_name: nginx
ports:
- "8010:8010"
volumes:
- .:/code
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
links:
- ivms
restart: unless-stopped
ivms:
build: .
container_name: ivms
command: bash bashes/createDB.sh
volumes:
- .:/code
expose:
- "8010"
ports:
- "9001:9001"