Search code examples
dockerwercker

Wercker Services Not Being Linked to Main Container


The issue I am experiencing with Wercker is that the specific linked services in my wercker.yml are not being linked to my main docker container.

I noticed this issue when my node app was not running on port 3001 after a successful Wercker deploy in which it's output can be seen in the image below.

enter image description here

Therefore I SSH'd into my server and into my docker container that was running after the Wercker deploy using:

docker exec -i -t <my-container-name> ./bin/bash

and found the following MongoDB error in my PM2 logs:

[MongoError: connect EHOSTUNREACH 172.17.0.7:27017

The strange fact is that from the images below you can see that both the environment variables that I need from each respective service have been set:

enter image description here

enter image description here

Does anyone know why the services containers cannot be accessed from my main container even thought their environment variables have been set?

The folloing is the wercker.yml file that I am using.

box: node

services:
  - id: mongo
  - id: redis

build:
  steps:
    - npm-install

deploy:
  steps:
    - npm-install
    - script:
        name: install pm2
        code: npm install pm2 -g
    - internal/docker-push:
        username: $DOCKER_USERNAME
        password: $DOCKER_PASSWORD
        repository: /
        ports: "3001"
        cmd: /bin/bash -c "cd /pipeline/source && pm2 start processes_prod.json --no-daemon"
        env: "MONGO_PORT_27017_TCP_ADDR"=$MONGO_PORT_27017_TCP_ADDR,"REDIS_PORT_6379_TCP_ADDR"=$REDIS_PORT_6379_TCP_ADDR
    - add-ssh-key:
        keyname: DIGITAL_OCEAN_KEY
    - add-to-known_hosts:
        hostname: 
    - script:
        name: pull latest image
        code: ssh root@ docker pull /:latest
    - script:
        name: stop running container
        code: ssh root@ docker stop  || echo ‘failed to stop running container’
    - script:
        name: remove stopped container
        code: ssh root@ docker rm  || echo ‘failed to remove stopped container’
    - script:
        name: remove image behind stopped container
        code: ssh root@ docker rmi /:current || echo ‘failed to remove image behind stopped container’
    - script:
        name: tag newly pulled image
        code: ssh root@ docker tag /:latest /:current
    - script:
        name: run new container
        code: ssh root@ docker run -d -p 8080:3001 --name  /:current
    - script:
        name: env
        code: env

Solution

  • AFAIK the Wercker services are available only in the build process, and not the deploy one. Mongo and Redis are persisted data stores - meaning they are not supposed to be reinstalled every time you deploy.
    So make sure you manually setup Redis and Mongo in your deploy environment.