Skip to content

Docker instructions do not work on M1 Mac #26

@playertr

Description

@playertr

From a fresh clone on main (961d848), ./run.bash does not work on M1 mac. Output is as follows:

> pwd
/Users/timplayer/Documents/icra2023_ros2_gz_tutorial/docker
> ./run.bash osrf/icra2023_ros2_gz_tutorial:tutorial_no_nvidia --no-nvidia
osrf/icra2023_ros2_gz_tutorial:tutorial_no_nvidia
non-network local connections being added to access control list
docker: invalid reference format.
See 'docker run --help'.
non-network local connections being removed from access control list

When I run the command manually, I get further:

> docker run -it -e DISPLAY -e QT_X11_NO_MITSHM=1 -e XAUTHORITY=/tmp/.docker.xauth -v /tmp/.docker.xauth:/tmp/.docker.xauth -v /tmp/.X11-unix:/tmp/.X11-unix -v /etc/localtime:/etc/localtime:ro -v /dev/input:/dev/input --privileged --rm --security-opt seccomp=unconfined --ipc=host --network=host -v /Users/timplayer/.gitconfig:/home/developer/.gitconfig:ro "-e "ROS_DOMAIN_ID=0 "-e "ROS_LOCALHOST_ONLY=1 "-e "GZ_IP=127.0.0.1 "-e "GZ_RELAY=127.0.0.1 osrf/icra2023_ros2_gz_tutorial:tutorial_no_nvidia
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
~/docs.ros.org ~
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

developer@docker-desktop:~$ gz sim
Error setting socket option (IP_MULTICAST_IF).
Error setting socket option (IP_MULTICAST_IF).
Error setting socket option (IP_MULTICAST_IF).
Error setting socket option (IP_MULTICAST_IF).
Did you set the environment variable IGN_IP with a correct IP address?
  [172.17.0.1] seems an invalid local IP address.
  Using 127.0.0.1 as hostname.
terminate called after throwing an instance of 'std::out_of_range'
  what():  vector::_M_range_check: __n (which is 0) >= this->size() (which is 0)
Error setting socket option (IP_MULTICAST_IF).
Error setting socket option (IP_MULTICAST_IF).
Error setting socket option (IP_MULTICAST_IF).
Error setting socket option (IP_MULTICAST_IF).
Did you set the environment variable IGN_IP with a correct IP address?
  [172.17.0.1] seems an invalid local IP address.
  Using 127.0.0.1 as hostname.
Stack trace (most recent call last):
#31   Object "/lib/x86_64-linux-gnu/libc.so.6", at 0x4001c04d8f, in
#30   Object "gz sim server", at 0x400000117e, in
#29   Object "/lib/x86_64-linux-gnu/libruby-3.0.so.3.0", at 0x400190ee19, in ruby_run_node
#28   Object "/lib/x86_64-linux-gnu/libruby-3.0.so.3.0", at 0x400190b317, in
#27   Object "/lib/x86_64-linux-gnu/libruby-3.0.so.3.0", at 0x4001aa030c, in rb_vm_exec
#26   Object "/lib/x86_64-linux-gnu/libruby-3.0.so.3.0", at 0x4001a9ac96, in
#25   Object "/lib/x86_64-linux-gnu/libruby-3.0.so.3.0", at 0x4001a97fc5, in
#24   Object "/lib/x86_64-linux-gnu/libruby-3.0.so.3.0", at 0x4001a95c34, in
#23   Object "/lib/x86_64-linux-gnu/libruby-3.0.so.3.0", at 0x40019e1a1e, in
#22   Object "/lib/x86_64-linux-gnu/libruby-3.0.so.3.0", at 0x400190c9ac, in rb_protect
#21   Object "/lib/x86_64-linux-gnu/libruby-3.0.so.3.0", at 0x4001aa4c61, in rb_yield
#20   Object "/lib/x86_64-linux-gnu/libruby-3.0.so.3.0", at 0x4001aa030c, in rb_vm_exec
#19   Object "/lib/x86_64-linux-gnu/libruby-3.0.so.3.0", at 0x4001a9ac96, in
#18   Object "/lib/x86_64-linux-gnu/libruby-3.0.so.3.0", at 0x4001a97fc5, in
#17   Object "/lib/x86_64-linux-gnu/libruby-3.0.so.3.0", at 0x4001a95c34, in
#16   Object "/usr/lib/x86_64-linux-gnu/ruby/3.0.0/fiddle.so", at 0x400562044b, in
#15   Object "/lib/x86_64-linux-gnu/libruby-3.0.so.3.0", at 0x4001a63088, in rb_nogvl
#14   Object "/usr/lib/x86_64-linux-gnu/ruby/3.0.0/fiddle.so", at 0x400561fd6b, in
#13   Object "/lib/x86_64-linux-gnu/libffi.so.8", at 0x400564d492, in
#12   Object "/lib/x86_64-linux-gnu/libffi.so.8", at 0x4005650e2d, in
#11   Object "/usr/lib/x86_64-linux-gnu/libgz-sim7-gz.so.7.5.0", at 0x4006103c2f, in runServer
terminate called after throwing an instance of 'std::out_of_range'
#10   Object "/lib/x86_64-linux-gnu/libgz-transport12.so.12", at 0x40068aec1f, in gz::transport::v12::Node::Node(gz::transport::v12::NodeOptions const&)
#9    Object "/lib/x86_64-linux-gnu/libgz-transport12.so.12", at 0x40068a40de, in
#8    Object "/lib/x86_64-linux-gnu/libgz-transport12.so.12", at 0x40068c6208, in gz::transport::v12::NodeShared::NodeShared()
#7    Object "/lib/x86_64-linux-gnu/libstdc++.so.6", at 0x4005727512, in
#6    Object "/lib/x86_64-linux-gnu/libstdc++.so.6", at 0x4005730517, in __cxa_throw
#5    Object "/lib/x86_64-linux-gnu/libstdc++.so.6", at 0x40057302b6, in std::terminate()
#4    Object "/lib/x86_64-linux-gnu/libstdc++.so.6", at 0x400573024b, in
#3    Object "/lib/x86_64-linux-gnu/libstdc++.so.6", at 0x4005724bbd, in
#2    Object "/lib/x86_64-linux-gnu/libc.so.6", at 0x4001c037f2, in abort
#1    Object "/lib/x86_64-linux-gnu/libc.so.6", at 0x4001c1d475, in raise
#0    Object "/lib/x86_64-linux-gnu/libc.so.6", at 0x4001c71a7c, in pthread_kill
Aborted (Signal sent by tkill() 40 1000)
qemu: uncaught target signal 6 (Aborted) - core dumped
  what():  vector::_M_range_check: __n (which is 0) >= this->size() (which is 0)
Stack trace (most recent call last):
#31   Object "/lib/x86_64-linux-gnu/libruby-3.0.so.3.0", at 0x400190ee19, in ruby_run_node
#30   Object "/lib/x86_64-linux-gnu/libruby-3.0.so.3.0", at 0x400190b317, in
#29   Object "/lib/x86_64-linux-gnu/libruby-3.0.so.3.0", at 0x4001aa030c, in rb_vm_exec
#28   Object "/lib/x86_64-linux-gnu/libruby-3.0.so.3.0", at 0x4001a9ac96, in
#27   Object "/lib/x86_64-linux-gnu/libruby-3.0.so.3.0", at 0x4001a97fc5, in
#26   Object "/lib/x86_64-linux-gnu/libruby-3.0.so.3.0", at 0x4001a95c34, in
#25   Object "/lib/x86_64-linux-gnu/libruby-3.0.so.3.0", at 0x40019e1a1e, in
#24   Object "/lib/x86_64-linux-gnu/libruby-3.0.so.3.0", at 0x400190c9ac, in rb_protect
#23   Object "/lib/x86_64-linux-gnu/libruby-3.0.so.3.0", at 0x4001aa4c61, in rb_yield
#22   Object "/lib/x86_64-linux-gnu/libruby-3.0.so.3.0", at 0x4001aa030c, in rb_vm_exec
#21   Object "/lib/x86_64-linux-gnu/libruby-3.0.so.3.0", at 0x4001a9ac96, in
#20   Object "/lib/x86_64-linux-gnu/libruby-3.0.so.3.0", at 0x4001a97fc5, in
#19   Object "/lib/x86_64-linux-gnu/libruby-3.0.so.3.0", at 0x4001a95c34, in
#18   Object "/usr/lib/x86_64-linux-gnu/ruby/3.0.0/fiddle.so", at 0x400562044b, in
#17   Object "/lib/x86_64-linux-gnu/libruby-3.0.so.3.0", at 0x4001a63088, in rb_nogvl
#16   Object "/usr/lib/x86_64-linux-gnu/ruby/3.0.0/fiddle.so", at 0x400561fd6b, in
#15   Object "/lib/x86_64-linux-gnu/libffi.so.8", at 0x400564d492, in
#14   Object "/lib/x86_64-linux-gnu/libffi.so.8", at 0x4005650e2d, in
#13   Object "/usr/lib/x86_64-linux-gnu/libgz-sim7-gz.so.7.5.0", at 0x40060ff89f, in runGui
#12   Object "/lib/x86_64-linux-gnu/libgz-sim7-gui.so.7", at 0x40061ca7f5, in gz::sim::v7::gui::runGui(int&, char**, char const*, char const*, int, char const*)
#11   Object "/lib/x86_64-linux-gnu/libgz-sim7-gui.so.7", at 0x40061c7d95, in gz::sim::v7::gui::createGui(int&, char**, char const*, char const*, bool, char const*, int, char const*)
#10   Object "/lib/x86_64-linux-gnu/libgz-transport12.so.12", at 0x40068aec1f, in gz::transport::v12::Node::Node(gz::transport::v12::NodeOptions const&)
#9    Object "/lib/x86_64-linux-gnu/libgz-transport12.so.12", at 0x40068a40de, in
#8    Object "/lib/x86_64-linux-gnu/libgz-transport12.so.12", at 0x40068c6208, in gz::transport::v12::NodeShared::NodeShared()
#7    Object "/lib/x86_64-linux-gnu/libstdc++.so.6", at 0x4005727512, in
#6    Object "/lib/x86_64-linux-gnu/libstdc++.so.6", at 0x4005730517, in __cxa_throw
#5    Object "/lib/x86_64-linux-gnu/libstdc++.so.6", at 0x40057302b6, in std::terminate()
#4    Object "/lib/x86_64-linux-gnu/libstdc++.so.6", at 0x400573024b, in
#3    Object "/lib/x86_64-linux-gnu/libstdc++.so.6", at 0x4005724bbd, in
#2    Object "/lib/x86_64-linux-gnu/libc.so.6", at 0x4001c037f2, in abort
#1    Object "/lib/x86_64-linux-gnu/libc.so.6", at 0x4001c1d475, in raise
#0    Object "/lib/x86_64-linux-gnu/libc.so.6", at 0x4001c71a7c, in pthread_kill
Aborted (Signal sent by tkill() 42 1000)
qemu: uncaught target signal 6 (Aborted) - core dumped
developer@docker-desktop:~$

We discussed a couple workarounds for M1 mac:

  • use a large VMWare fusion image and distribute via USB stick (with VMWare .iso)
  • Build the docker image with ARM64

These have pros and cons, including X server forwarding considerations.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions