How to get the IP address of the docker host from inside a docker container

后端 未结 24 1446
鱼传尺愫
鱼传尺愫 2020-11-22 06:41

As the title says. I need to be able to retrieve the IP address the docker hosts and the portmaps from the host to the container, and doing that inside of the container.

相关标签:
24条回答
  • 2020-11-22 07:19

    The only way is passing the host information as environment when you create a container

    run --env <key>=<value>
    
    0 讨论(0)
  • 2020-11-22 07:19

    Here is how I do it. In this case, it adds a hosts entry into /etc/hosts within the docker image pointing taurus-host to my local machine IP: :

    TAURUS_HOST=`ipconfig getifaddr en0`
    docker run -it --rm -e MY_ENVIRONMENT='local' --add-host "taurus-host:${TAURUS_HOST}" ...
    

    Then, from within Docker container, script can use host name taurus-host to get out to my local machine which hosts the docker container.

    0 讨论(0)
  • 2020-11-22 07:19

    Maybe the container I've created is useful as well https://github.com/qoomon/docker-host

    You can simply use container name dns to access host system e.g. curl http://dockerhost:9200, so no need to hassle with any IP address.

    0 讨论(0)
  • 2020-11-22 07:20

    The --add-host could be a more cleaner solution (but without the port part, only the host can be handled with this solution). So, in your docker run command, do something like:

    docker run --add-host dockerhost:`/sbin/ip route|awk '/default/ { print  $3}'` [my container]
    

    (From https://stackoverflow.com/a/26864854/127400 )

    0 讨论(0)
  • 2020-11-22 07:21

    If you want real IP address (not a bridge IP) on Windows and you have docker 18.03 (or more recent) do the following:

    Run bash on container from host where image name is nginx (works on Alpine Linux distribution):

     docker run -it nginx /bin/ash
    

    Then run inside container

    / # nslookup host.docker.internal
    
    Name:      host.docker.internal
    Address 1: 192.168.65.2
    

    192.168.65.2 is the host's IP - not the bridge IP like in spinus accepted answer.

    I am using here host.docker.internal:

    The host has a changing IP address (or none if you have no network access). From 18.03 onwards our recommendation is to connect to the special DNS name host.docker.internal, which resolves to the internal IP address used by the host. This is for development purpose and will not work in a production environment outside of Docker for Windows.

    0 讨论(0)
  • 2020-11-22 07:21

    This is a minimalistic implementation in Node.js for who is running the host on AWS EC2 instances, using the afore mentioned EC2 Metadata instance

    const cp = require('child_process');
    const ec2 = function (callback) {
        const URL = 'http://169.254.169.254/latest/meta-data/local-ipv4';
        // we make it silent and timeout to 1 sec
        const args = [URL, '-s', '--max-time', '1'];
        const opts = {};
        cp.execFile('curl', args, opts, (error, stdout) => {
            if (error) return callback(new Error('ec2 ip error'));
            else return callback(null, stdout);
        })
            .on('error', (error) => callback(new Error('ec2 ip error')));
    }//ec2
    

    and used as

    ec2(function(err, ip) {
            if(err) console.log(err)
            else console.log(ip);
        })
    
    0 讨论(0)
提交回复
热议问题