Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Docker-compose links vs external_links

I believe it is simple question but I still do not get it from Docker-compose documentations. What is the difference between links and external_links?

I like external_links as I want to have core docker-compose and I want to extend it without overriding the core links.

What exactly I have, I am trying to setup logstash which depends on the elasticsearch. Elasticsearch is in the core docker-compose and the logstash is in the depending one. So I had to define the elastic search in the depended docker-compose as a reference as logstash need it as a link. BUT Elasticsearch has already its own links which I do not want to repeat them in the dependent one.

Can I do that with external_link instead of link?

I know that links will make sure that the link is up first before linking, does the external_link will do the same?

Any help is appreciated. Thanks.

like image 795
amm Avatar asked Feb 02 '16 13:02

amm


People also ask

Is Docker compose links deprecated?

However, you can use other mechanisms such as volumes to share environment variables between containers in a more controlled way. Contrariwise, Docker Compose also has a “links” feature, which is not deprecated according to the Docker Compose docs.

What is links in Docker compose?

3. Docker Compose links. links instructs Docker to link containers over a network. When we link containers, Docker creates environment variables and adds containers to the known hosts list so they can discover each other.

What does the links portion of the Docker compose file do?

According to the Docker Compose's compose-file documentation: depends_on - Express dependency between services. links - Link to containers in another service and also express dependency between services in the same way as depends_on.

What is Depends_on in Docker compose?

You can control the order of service startup and shutdown with the depends_on option. Compose always starts and stops containers in dependency order, where dependencies are determined by depends_on , links , volumes_from , and network_mode: "service:..." .


1 Answers

Use links when you want to link together containers within the same docker-compose.yml. All you need to do is set the link to the service name. Like this:

---
elasticsearch:
  image: elasticsearch:latest
  command: elasticsearch -Des.network.host=0.0.0.0
  ports:
    - "9200:9200"

logstash:
  image: logstash:latest
  command: logstash -f logstash.conf
  ports:
    - "5000:5000"
  links:
    - elasticsearch

If you want to link a container inside of the docker-compose.yml to another container that was not included in the same docker-compose.yml or started in a different manner then you can use external_links and you would set the link to the container's name. Like this:

---
logstash:
  image: logstash:latest
  command: logstash -f logstash.conf
  ports:
    - "5000:5000"
  external_links:
    - my_elasticsearch_container

I would suggest the first way unless your use case for some reason requires that they cannot be in the same docker-compose.yml

like image 67
jhinds Avatar answered Sep 28 '22 04:09

jhinds