2

I have some services in docker-compose:

version: "3"
services:
  site:
    volumes:
      - .:/app
    build:
      dockerfile: Dockerfile.dev
      context: docker
    ports:
      - "80:80"

  webpack:
    image: node:6.12.0
    ports:
      - "8080:8080"
    volumes:
      - .:/app
    working_dir: /app
    command: bash -c "yarn install; yarn run gulp server"
  db:
    image: mysql:5.7.20
    ports: 
      - "3306:3306"
  environment:
      MYSQL_DATABASE: ${DB_NAME}
      MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}

And I can connect to exposed ports of services:

  • Site -- localhost:80
  • Webpack -- localhost:8080
  • MySQL: -- localhost:3306

How can I use nginx-proxy to expose multiple ports of different servers on the same domain (?):

  • Site -- example.dev:80
  • Webpack -- example.dev:8080
  • MySQL: -- example.dev:3306

This works:

services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    ports:
      - "80:80"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro

  site:
    volumes:
      - .:/app
    build:
      dockerfile: Dockerfile.dev
      context: docker
    expose:
      - 80
    environment:
      VIRTUAL_HOST: ${VIRTUAL_HOST}

But this is not:

services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro

  site:
    volumes:
      - .:/app
    build:
      dockerfile: Dockerfile.dev
      context: docker
    expose:
      - 80
    environment:
      VIRTUAL_HOST: ${VIRTUAL_HOST}

  webpack:
    image: node:6.12.0
    expose:
      - 8080
    environment:
      VIRTUAL_HOST: ${VIRTUAL_HOST}
      VIRTUAL_PORT: 8080
    volumes:
      - .:/app
    working_dir: /app
    command: bash -c "yarn install; yarn run gulp server"

What am I do wrong? How can I solve this problem?

//Sorry for my worst English. Hope you'll understand me

Update:

This is just an example. In the future I'll make proxy as external network and will connect services to it. And I wont to run two docker-compose "files" on the same host (VPS). Purpose: production and test versions on the same host, that use same ports BUT different domains. For example:

  • example.com -- Web Site
  • example.com:81 -- PhpMyAdmin
  • test.example.com -- Web Site for testing
  • test.example.com:81 -- PhpMyAdmin for testing

0 Answers0