How to get the mapped port on host from a docker container?

前端 未结 3 1821
南方客
南方客 2021-02-02 15:59

I want to run a task in some docker containers on different hosts. And I have written a manager app to manage the containers(start task, stop task, get status, etc...) . Once a

相关标签:
3条回答
  • 2021-02-02 16:14

    Once a container is started, it will send an http request to the manager with its address and port

    This isn't going to be working. From inside a container you cannot figure out to which docker host port a container port is mapped to.

    What I can think about which would work and be the closest to what you describe is making the container open a websocket connection to the manager. Such a connection would allow two ways communication between your manager and container while still being over HTTP.


    What you are trying to achieve is called service discovery. There are already tools for service discovery that work with Docker. You should pick one of them instead of trying to make your own.

    See for instance:

    • etcd
    • consul
    • zookeeper

    If you really want to implement your service discovery system, one way to go is to have your manager use the docker event command (or one of the docker client librairies). This would enable your manager to get notified of containers creations/deletions with nothing to do on the container side.

    Then query the docker host to figure out the ports that are mapped to your containers with docker port.

    0 讨论(0)
  • 2021-02-02 16:16

    i share /var/run/docker.sock to container and get self info

    docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock alpine:latest sh
    

    in container shell

    env //get HOSTNAME
    
    curl --unix-socket /var/run/docker.sock http://localhost/containers/3c6b9e44a622/json
    

    the 3c6b9e44a622 is your HOSTNAME

    0 讨论(0)
  • 2021-02-02 16:29

    You can also you docker port container_id

    The doc

    https://docs.docker.com/reference/commandline/port/

    examples from the doc

    $ docker port test
    7890/tcp -> 0.0.0.0:4321
    9876/tcp -> 0.0.0.0:1234
    $ docker port test 7890/tcp
    0.0.0.0:4321
    $ docker port test 7890/udp
    2014/06/24 11:53:36 Error: No public port '7890/udp' published for test
    $ docker port test 7890
    0.0.0.0:4321
    
    0 讨论(0)
提交回复
热议问题