Docker Compose – container receiving connection refused

Using docker-compose, I’m trying to run my API on a publicly available port 8080 and an sqs service on a privately available port 9324. The API needs to be able to communicate with the sqs service. In order to do so, I have set up the following docker-compose.yml:

version: '2'
services:
  api:
    image: api
    ports:
      - "8080:8080"
  sqs:
    image: pakohan/elasticmq

I have tried several iterations, including adding a link alias for the api:

  • Environment variables in docker when exec docker run
  • Error when creating a MySQL database in a Dockerfile
  • Download failure within official ubuntu docker images on Ubuntu 14.04 host
  • Docker machine users has no access to files on host
  • ctrl+G in erl doesn't work
  • Lost connection to MySQL server when creating database from script in a Docker container
  • links:
      - "sqs:localhost"
    

    and exposing the port for sqs:

    ports:
      - "9324:9324"
    

    but neither seems to work. The API always gets a connection refused error when trying to communicate with the sqs service.

    When the sqs port is publicly exposed an API running outside of docker is able to communicate just fine (so the sqs service is getting initialized properly).

    Does anyone have any ideas as to how to solve this problem?

  • Docker - Cannot forward ports for an interactive shell
  • Docker image push over SSH (distributed)
  • Use docker in restricted internet environnement
  • eclipse che snapshot does not work
  • Running a copy of docker container
  • Why so many layers on base images? Docker
  • One Solution collect form web for “Docker Compose – container receiving connection refused”

    Trying to trick the api container into connecting to sqs by telling it that it’s actually connecting to localhost isn’t going to work. You need to make sqs available to api under a name that doesn’t already have a special meaning, like:

    links:
        - sqs:original-name
    

    or even:

    links:
        - sqs
    

    which makes sqs accessible to api under the name “sqs“.

    Then, of course, you need to tell api that it should connect to port 9324 of original-name or sqs instead of port 9324 of localhost. How you do that depends on what api actually is.

    Docker will be the best open platform for developers and sysadmins to build, ship, and run distributed applications.