Why do you want to run hub & node on different machines? In terms of docker, each container itself is a separate "machine". So linking them as Mark suggested is simply having two machines remotely talking to each other within the "network" of the docker host, although behind the scenes the docker host that runs these containers is on your single machine of physical hardware, but in terms of virtualization they are already remote. Because docker uses less resources, this is sufficient. You only need to run each container on separate docker hosts if you scale up your grid/tests to be very high volume that a local deployment can not handle, and since no one has really mentioned this for docker selenium (as far as I know), I would imagine no one has really hit that limit/need yet.
It gets more complicated when hub and node containers are not on the same docker host (e.g. hub on docker host A, node on docker host B), because the linking step gets more complicated. You might want to look at these:
(read over the sections on "-e SELENIUM_HUB_HOST=docker.host \", "-e SELENIUM_NODE_HOST=docker.host \", "Note SELENIUM_HUB_HOST and SELENIUM_NODE_HOST represent a network firewall config challenge when running on different machines and should be changed to the proper host names or IP addresses of those.")
or to try to keep things simple on the Grid management side (i.e. treat all remote docker hosts that run containers as a single local machine), you then may need to complicate your Docker deployment more to make the docker networking simpler between containers, with these: