Search code examples
dockerchainlink

Chainlink node can't make requests to Chainlink external adapter (on localhost)


I have a chainlink Node which is running on port 6688. I'm running it with docker, with the following command:

cd ~/.chainlink-rinkeby && docker run -p 6688:6688  \
-v ~/.chainlink-rinkeby:/chainlink  \
-it --env-file=.env \
 smartcontract/chainlink:1.4.0-root local n -p /chainlink/.password -a /chainlink/.api

And I have an external adapter running on port 8080.

If I request it { "id": 0, "data":{ "columns": ["blood","heath"], "linesAmount":500 } } it returns me a correct payload, in the format that is expected from the external adapter:

{
    "jobRunID": 0,
    "data": {
        "ipfsHash": "anIpfshashShouldBeHere",
        "providers": [
            "0x03996eF07f84fEEe9f1dc18B255A8c01A4986701"
        ],
        "result": "anIpfshashShouldBeHere"
    },
    "result": "anIpfshashShouldBeHere",
    "statusCode": 200
}

The problem is, in the chainlink node, specifically in the fetch method it gives me an error: error making http request: Post "http://localhost:8080": dial tcp 127.0.0.1:8080: connect: connection refused

Is it related to the docker container? I don't see why it wouldn't be able to request resuources from another port in the same machine. Am I missing some configuration maybe? From what I've read from the docs it's possible to run the adapter locally. Below, a picture with more information:

enter image description here


Solution

  • If you're External Adapter (EA) is running on http://localhost:8080 and you're trying to reach that EA from a Chainlink node running inside Docker, then you can't use localhost, you need to get out of the Docker container and onto the host running the Docker engine (your Windows or Mac machine).

    To do, so define your bridge to use http://host.docker.internal:8080.

    Further details can be found in the Docker Docs.