Docker-compose external_links not able to connect

前端 未结 3 1841
闹比i
闹比i 2021-02-09 14:03

I have a couple of app containers that I want to connect to the mongodb container. I tried with external_links but I can not connect to the mongodb.

I get

相关标签:
3条回答
  • 2021-02-09 14:43

    Recently I faced Name resolution failure trying to link 2 containers handled by docker-compose v3 representing gRPC server and client in my case, but failed and with external_links.

    I'll probably duplicate some of the info posted here, but will try to summarize as all these helped me solving the issue.

    From external_links docs (as mentioned in earlier answer):

    If you’re using the version 2 or above file format, the externally-created containers must be connected to at least one of the same networks as the service that is linking to them.


    The following configuration solved the issue.

    project-grpc-server/docker-compose.yml

    version: '3'
    services:
        app:
            networks:
                - some-network
    networks:
        some-network:
    

    Server container configured as expected.


    project-grpc-client/docker-compose.yml

    services:
        app:
            external_links:
                # Assigning easy alias to the target container
                - project-grpc-server_app_1:server
            networks:
                # Mentioning current container as a part of target network
                - project-grpc-server_some-network
    networks:
        # Announcing target network (where server resides)
        project-grpc-server_some-network:
            # Telling that announced network already exists (shouldn't be created but used)
            external: true
    

    When using defaults (no container_name configured) the trick with configuring client container is in prefixes. In my case network name had prefix project-grpc-server_ when working with docker-compose and than goes the name itself some-network (project-grpc-server_some-network). So fully qualified network names should be passed when dealing with separate builds.

    While container name is obvious as it appears from time to time on the screen the full network name is not easy-to-guess candidate when first facing this section of Docker, unless docker network ls.

    I'm not a Docker expert, so please don't judge too strict if all this is obvious and essential in Docker world.

    0 讨论(0)
  • 2021-02-09 14:57

    Yuva's answer above for the version 2 holds good for version 3 as well.

    The documentation for the external_links isn't clear enough.

    For more clarity I pasted the version 3 variation with annotation

    version: '3'
    
    services:
      app:
        image: training/webapp
        networks:
          - <<network created by other compose file>>
        external_links:
          - postgres:postgres
    
    networks:
      <<network created by other compose file>>:
        external: true
    
    0 讨论(0)
  • 2021-02-09 15:01

    Documentation at https://docs.docker.com/compose/compose-file/#/externallinks says

    If you’re using the version 2 file format, the externally-created containers must be connected to at least one of the same networks as the service which is linking to them.
    

    Ex:

    Create a new docker network

    docker network create -d bridge custom

    docker-compose-1.yml

        version: '2'
    
        services:
          postgres:
            image: postgres:latest
            ports:
              - 5432:5432
            networks:
              - custom
    
        networks:
          custom:
            external: true
    

    docker-compose-2.yml

        version: '2'
    
        services:
          app:
            image: training/webapp
            networks:
              - custom
            external_links:
              - postgres:postgres
    
        networks:
          custom:
            external: true
    
    0 讨论(0)
提交回复
热议问题