Ask Your Question

Limit the Ephemeral Port Range that ROS uses to make XMLRPC Socket Connection

asked 2016-10-08 08:43:20 -0500

lanaki gravatar image

I am working on a project that will require two Robot Operating System (ROS) nodes running in separate containers on separate hosts on separate LANs to communicate over a router. The issue I am having is that ROS uses XMLRPC to open up a dynamic ephemeral port on the host to establish a socket connection between publisher & subscriber nodes. The Docker container that each of the ROS nodes run in has a local port range in the proc/sys/net/ipv4/ip_local_port_range from 32768-60999. I will need to bind the container port to the local host port in order for the two ROS nodes to communicate. Unfortunately, this will require that I bind 28231 ports at docker run command in order to ensure that ROS dynamically chooses an exposed and binded port to communicate over the network. I would like to limit the ephemeral port range that ROS uses to create XMLRPC connection between publisher & subscriber to allow for efficient use of ROS and docker, especially when quickly spinning up new containers for high availability. Below are what I have done thus far:

run docker swarm on each of the hosts to communicate over the docker overlay bridge in Dockerfile--EXPOSE 32768-33768 bind to host--docker run -it --rm -p 32768-33768:32768-33768

looking in the proc/sys/net/ipv4/ip_local_port_range the ephemeral port range is read only from 32768-60999

I am running ubuntu 14.04 LTS, Docker v1.12, ROS Indigo Base

Any help in limiting the Ephemeral Port Range that ROS uses to make XMLRPC Socket Connection between publisher & subscriber?

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted

answered 2016-10-15 00:27:47 -0500

ruffsl gravatar image

updated 2016-10-15 00:41:14 -0500

I haven't yet had the chance to do a lot with docker swarm and ROS since the Software Defined Network overhaul in docker/libkv a while ago, been a bit busy. But from what I remember is that you could attach two containers running from separate host (if the docker engines on those host are part of the same swarm) to a new SDNetwork you define. This is network attaching is done in the deployment example in the docs on the DockerHub ROS repo, but for only for one engine.

If you want to achieve the same effect but with containers running on separate engines, you need to express this to the docker swarm master that is launching the containers on the swarm cluster.

There should be no need to muck about with manual port mapping.

edit flag offensive delete link more


Based on the docker swarm doc, for the containers communication in docker swarm, an overlay network should be built. However, I tried the docker swarm mode with an overlay network, but the ros containers in different machine cannot find each other. But the containers on th same machine are fine.

onlytailei gravatar image onlytailei  ( 2017-05-25 05:20:13 -0500 )edit

It there anything special to set except the overlay network? Cause I once deployed some other tasks in docker swarm with overlay network. The containers on separate engines can communicate with each other based on their node name. But why ros cannot?

onlytailei gravatar image onlytailei  ( 2017-05-25 05:22:22 -0500 )edit

Oh sorry, it's the problem of docker, I just make it work.

onlytailei gravatar image onlytailei  ( 2017-05-25 08:01:20 -0500 )edit

I'm experiencing the same issues. What did you do to resolve this?

travipross gravatar image travipross  ( 2020-10-14 11:18:05 -0500 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools



Asked: 2016-10-08 08:43:20 -0500

Seen: 440 times

Last updated: Oct 15 '16