Search code examples
dockernetwork-programmingautomationdocker-compose

Create networks automatically in Docker Compose


When using custom networks in Docker like

networks:
  default:
    external:
      name: service-tier

And try to run that, I´m getting the error

ERROR: Network service-tier declared as external, but could not be found. Please create the network manually using docker network create service-tier and try again.

Is it possible to create networks automatically with docker-compose or is there no other way than creating them manually first?


Solution

  • external is to use an existing network. If you want compose to make networks you simply do:

    networks:
      network1:
      network2:
    

    .. to instruct compose to make the networks. They will be named <compose-dir>-<network name> Verify the creation by using docker network ls.

    You can also override the default network or specify more properties.

    networks:
      default:
        driver: bridge
        driver_opts:
          com.docker.network.driver.mtu: 1450
    

    .. will override the default network setting MTU to 1450 (handy when the host have lower than 1500 mtu and path mtu discovery doesn't work properly). There are other bridge driver options.

    external makes more sense when you want services in two compose setups to talk to each other or you have a manually created network.