Search code examples
dockergitlab-cigitlab-ci-runnerdocker-networknexus3

Gitlab CI-CD via Docker : can't access Nexus in another container


I'm using Gitlab CI-CD to build some projects using a single Runner (for now) on Docker (the runner itself is a docker container, so I guess this is Docker in Docker..)

My problem is that I can't use my own nexus/npm repository while building...

npm install --registry=http://153.89.23.53:8082/repository/npm-all
npm ERR! code EHOSTUNREACH
npm ERR! errno EHOSTUNREACH
npm ERR! request to http://153.89.23.53:8082/repository/npm-all/typescript/-/typescript-3.6.5.tgz failed, reason: connect EHOSTUNREACH 153.89.23.53:8082

The same runner on another server works perfectly, but it doens't work if running on the same server hosting the Nexus (everything is container-based)

The Gitlab runner is using the host network. If I connect to the Runner and try to ping 153.89.23.53:8082 (Nexus), it works

root@62591008a000:/# wget http://153.89.23.53:8082
--2020-07-13 09:56:16--  http://153.89.23.53:8082/
Connecting to 153.89.23.53:8082... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7952 (7.8K) [text/html]
Saving to: 'index.html'

index.html                                   100%[===========================================================================================>]   7.77K  --.-KB/s    in 0s      

2020-07-13 09:56:16 (742 MB/s) - 'index.html' saved [7952/7952]

So I guess the problem occurs in the "second docker container", the one used inside the runner... but I have no idea what I should change.

Note : I could probably set the gitlab runner to join the nexus network and use internal IPs, but this would break the scripts if the runner is started on other servers...


Solution

  • Ok, I found the solution..

    There is a network_mode settings that can be set in the runner configuration. Default value is bridge, not host..

    **config.toml**
     [runners.docker]
        ...
        volumes = ["/cache"]
        network_mode = "host"