Running ROS 2 nodes in Docker [community-contributed]
Run two nodes in a single docker container
Pull the ROS docker image with tag “jazzy-desktop”.
docker pull osrf/ros:jazzy-desktop
Run the image in a container in interactive mode.
$ docker run -it osrf/ros:jazzy-desktop
root@<container-id>:/#
Your best friend is the ros2
command line help now.
root@<container-id>:/# ros2 --help
E.g. list all installed packages.
root@<container-id>:/# ros2 pkg list
(you will see a list of packages)
E.g. list all executables:
root@<container-id>:/# ros2 pkg executables
(you will see a list of <package> <executable>)
Run a minimal example of 2 C++ nodes (1 topic subscriber listener
, 1 topic publisher talker
) from the package demo_nodes_cpp
in this container:
ros2 run demo_nodes_cpp listener &
ros2 run demo_nodes_cpp talker
Run two nodes in two separate docker containers
Open a terminal. Run the image in a container in interactive mode and launch a topic publisher (executable talker
from the package demo_nodes_cpp
) with ros2 run
:
docker run -it --rm osrf/ros:jazzy-desktop ros2 run demo_nodes_cpp talker
Open a second terminal. Run the image in a container in interactive mode and launch a topic subscriber (executable listener
from the package demo_nodes_cpp
) with ros2 run
:
docker run -it --rm osrf/ros:jazzy-desktop ros2 run demo_nodes_cpp listener
As an alternative to the command line invocation, you can create a docker-compose.yml
file (here version 2) with the following (minimal) content:
version: '2'
services:
talker:
image: osrf/ros:jazzy-desktop
command: ros2 run demo_nodes_cpp talker
listener:
image: osrf/ros:jazzy-desktop
command: ros2 run demo_nodes_cpp listener
depends_on:
- talker
To run the containers call docker compose up
in the same directory. You can close the containers with Ctrl+C
.