user3142695
user3142695

Reputation: 17332

Upgrade docker-compose to version 3

This is how my docker-compose.yml file looks like. As you can see, there is a nginx server, a mongoDB, the main application and for testing a nightwatch and selenium container.

nginx:
  container_name: 'nginx'
  image: 'nginx:1.11'
  restart: 'always'
  ports:
    - '80:80'
    - '443:443'
  volumes:
    - '/opt/nginx/conf.d:/etc/nginx/conf.d:ro'
    - '/opt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro'
    - '/etc/letsencrypt:/etc/letsencrypt'
    - '/opt/nginx/www:/var/www:ro'
  links:
    - 'app'

nightwatch:
  container_name: nightwatch
  image: 'registry.example.com/project/core:nightwatch'
  links:
    - selenium
  stdin_open: true
  tty: true

selenium:
  container_name: selenium
  image: selenium/standalone-chrome
  ports:
    - 4444:4444
  links:
    - app

db:
  container_name: db
  image: 'mongo:3.4'
  restart: 'always'
  volumes:
    - '/opt/mongo/project/prod:/data/db'

app:
  container_name: app
  image: 'registry.example.de/project/core:latest'
  restart: always
  links:
    - 'db'
  environment:
    - ROOT_URL=https://example.com
    - MONGO_URL=mongodb://db/db

You can also see, that I'm still using version 1 and I want to upgrade to current version (3). And there are a few problems for converting the file.

For example I do not understand the network option which should be used instead of the deprecated link to get access to containers.

In the nightwatch container I'm running a script like

module.exports = {
    'start application': function(browser) {
        browser
            .url('http://app') // <--
            .waitForElementVisible('body', 10000)
            .getTitle(function(result) {
                this.assert.equal(typeof result, 'string')
            })
    },
}

So I need to get access to the app container via nightwatch, which also needs selenium. The main app needs of course the db.

I need some help converting to version 3:

version: '3'
services:
  nginx:
    ...
  nightwatch:
  ...

Upvotes: 2

Views: 2818

Answers (1)

Robert
Robert

Reputation: 36763

This should be enough:

version: "3"

services:
  nginx:
    container_name: 'nginx'
    image: 'nginx:1.11'
    restart: 'always'
    ports:
      - '80:80'
      - '443:443'
    volumes:
      - '/opt/nginx/conf.d:/etc/nginx/conf.d:ro'
      - '/opt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro'
      - '/etc/letsencrypt:/etc/letsencrypt'
      - '/opt/nginx/www:/var/www:ro'
    links:
      - app

  nightwatch:
    container_name: nightwatch
    image: 'registry.example.com/project/core:nightwatch'
    links:
      - selenium
    stdin_open: true
    tty: true

  selenium:
    container_name: selenium
    image: selenium/standalone-chrome
    ports:
      - 4444:4444
    links:
      - app

  db:
    container_name: db
    image: 'mongo:3.4'
    restart: 'always'
    volumes:
      - '/opt/mongo/project/prod:/data/db'

  app:
    container_name: app
    image: 'registry.example.de/project/core:latest'
    restart: always
    links:
      - db
    environment:
      - ROOT_URL=https://example.com
      - MONGO_URL=mongodb://db/db

You don't need to configure extra networks than the default provided by compose.

Linking containers is still configured as so. Try this:

version: "3"

services:
  abc:
    image: ubuntu
    command: tail -f /dev/null

  cde:
    image: busybox
    command: ping abc
    links:
      - abc

Upvotes: 1

Related Questions