# Docker Compose with multi node deployment issue

**URL:** <https://forum.weaviate.io/t/docker-compose-with-multi-node-deployment-issue/1720>\
**Category:** Support\
**Created:** [March 15, 2024, 6:01am UTC](https://forum.weaviate.io/t/docker-compose-with-multi-node-deployment-issue/1720 "2024-03-15T06:01:40Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![fenglizzz](https://yyz1.discourse-cdn.com/flex027/user_avatar/forum.weaviate.io/fenglizzz/32/1134_2.png) [@fenglizzz](https://forum.weaviate.io/u/fenglizzz)\
**Post date:** [March 15, 2024, 6:01am UTC](https://forum.weaviate.io/t/docker-compose-with-multi-node-deployment-issue/1720/1 "2024-03-15T06:01:40Z")

</div>

### Description

Hi, I am using docker compose to deploy Weaviate on two machines. The first machine’s docker compose yml file is:

```auto
services:
  weaviate-node-1:
    init: true
    command:
    - --host
    - 0.0.0.0
    - --port
    - '8080'
    - --scheme
    - http
    image: cr.weaviate.io/semitechnologies/weaviate:1.24.2
    ports:
    - 8080:8080
    - 7100:7100
    - 7101:7101
    - 50051:50051
    restart: on-failure:0
    volumes:
      - ./data-node-1:/var/lib/weaviate
    environment:
      LOG_LEVEL: 'debug'
      QUERY_DEFAULTS_LIMIT: 25
      AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
      PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
      DEFAULT_VECTORIZER_MODULE: 'none'
      CLUSTER_HOSTNAME: 'node1'
      CLUSTER_GOSSIP_BIND_PORT: '7100'
      CLUSTER_DATA_BIND_PORT: '7101'
    networks:
      - weaviate
networks:
  weaviate:
    attachable: true

```

The second machine docker compose file is:

```auto
services:
  weaviate-node-2:
    init: true
    command:
    - --host
    - 0.0.0.0
    - --port
    - '8081'
    - --scheme
    - http
    image: cr.weaviate.io/semitechnologies/weaviate:1.24.2
    ports:
    - 8081:8080
    - 7102:7102
    - 7103:7103
    - 50052:50051
    restart: on-failure:0
    volumes:
      - ./data-node-2:/var/lib/weaviate
    environment:
      LOG_LEVEL: 'debug'
      QUERY_DEFAULTS_LIMIT: 25
      AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
      PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
      DEFAULT_VECTORIZER_MODULE: 'none'
      CLUSTER_HOSTNAME: 'node2'
      CLUSTER_GOSSIP_BIND_PORT: '7102'
      CLUSTER_DATA_BIND_PORT: '7103'
      CLUSTER_JOIN: '10.12.226.225:7100'
    networks:
      - weaviate
networks:
  weaviate:
    attachable: true

```

after I ran docker compose up and I got the error as shown in the following logs.  
The log from node 1:

```auto
[+] Running 2/1
 ✔ Network weaviate_testing_weaviate Created 0.2s 
 ✔ Container weaviate_testing-weaviate-node-1-1 Created 0.0s 
Attaching to weaviate-node-1-1
weaviate-node-1-1 | {"action":"startup","level":"debug","msg":"created startup context, nothing done so far","startup_time_left":"59m59.997886965s","time":"2024-03-15T05:43:29Z"}
weaviate-node-1-1 | {"action":"startup","default_vectorizer_module":"none","level":"info","msg":"the default vectorizer modules is set to \"none\", as a result all new schema classes without an explicit vectorizer setting, will use this vectorizer","time":"2024-03-15T05:43:29Z"}
weaviate-node-1-1 | {"action":"startup","auto_schema_enabled":true,"level":"info","msg":"auto schema enabled setting is set to \"true\"","time":"2024-03-15T05:43:29Z"}
weaviate-node-1-1 | {"action":"startup","level":"debug","msg":"config loaded","startup_time_left":"59m59.997070446s","time":"2024-03-15T05:43:29Z"}
weaviate-node-1-1 | {"action":"startup","level":"debug","msg":"configured OIDC and anonymous access client","startup_time_left":"59m59.997044326s","time":"2024-03-15T05:43:29Z"}
weaviate-node-1-1 | {"action":"startup","level":"debug","msg":"initialized schema","startup_time_left":"59m59.997008365s","time":"2024-03-15T05:43:29Z"}
weaviate-node-1-1 | {"action":"startup","level":"debug","msg":"startup routine complete","time":"2024-03-15T05:43:29Z"}
weaviate-node-1-1 | {"level":"info","msg":"No resource limits set, weaviate will use all available memory and CPU. To limit resources, set LIMIT_RESOURCES=true","time":"2024-03-15T05:43:29Z"}
weaviate-node-1-1 | {"action":"startup","level":"debug","msg":"start registering modules","time":"2024-03-15T05:43:29Z"}
weaviate-node-1-1 | {"action":"startup","level":"debug","msg":"completed registering modules","time":"2024-03-15T05:43:29Z"}
weaviate-node-1-1 | {"action":"startup_cluster_schema_sync","level":"debug","msg":"Only node in the cluster at this point. No schema sync necessary.","time":"2024-03-15T05:43:29Z"}
weaviate-node-1-1 | {"action":"inverted filter2search migration","level":"debug","msg":"migration skip flag set, skipping migration","time":"2024-03-15T05:43:29Z"}
weaviate-node-1-1 | {"action":"cluster_api_startup","level":"debug","msg":"serving cluster api on port 7101","port":7101,"time":"2024-03-15T05:43:29Z"}
weaviate-node-1-1 | {"action":"inverted filter2search migration","level":"debug","msg":"starting switching fallback mode","time":"2024-03-15T05:43:29Z"}
weaviate-node-1-1 | {"action":"inverted filter2search migration","level":"debug","msg":"no missing filterable indexes, fallback mode skipped","time":"2024-03-15T05:43:29Z"}
weaviate-node-1-1 | {"action":"startup","level":"debug","msg":"start initializing modules","time":"2024-03-15T05:43:29Z"}
weaviate-node-1-1 | {"action":"startup","level":"debug","msg":"finished initializing modules","time":"2024-03-15T05:43:29Z"}
weaviate-node-1-1 | {"action":"graphql_rebuild","level":"debug","msg":"rebuilding the graphql schema","schema":{"Objects":{"classes":[]}},"time":"2024-03-15T05:43:29Z"}
weaviate-node-1-1 | {"action":"grpc_startup","level":"info","msg":"grpc server listening at [::]:50051","time":"2024-03-15T05:43:29Z"}
weaviate-node-1-1 | {"action":"restapi_management","level":"info","msg":"Serving weaviate at http://[::]:8080","time":"2024-03-15T05:43:29Z"}
weaviate-node-1-1 | {"action":"telemetry_push","level":"info","msg":"telemetry started","payload":"\u0026{MachineID:cd3080db-13b9-4357-8015-9fefbebf3de3 Type:INIT Version:1.24.2 Modules: NumObjects:0 OS:linux Arch:amd64}","time":"2024-03-15T05:43:30Z"}
weaviate-node-1-1 | {"level":"debug","msg":" memberlist: Stream connection from=10.12.226.153:60154","time":"2024-03-15T05:44:08Z"}
weaviate-node-1-1 | {"level":"debug","msg":" memberlist: Failed UDP ping: node2 (timeout reached)","time":"2024-03-15T05:44:10Z"}
weaviate-node-1-1 | {"level":"info","msg":" memberlist: Suspect node2 has failed, no acks received","time":"2024-03-15T05:44:11Z"}
weaviate-node-1-1 | {"level":"debug","msg":" memberlist: Failed UDP ping: node2 (timeout reached)","time":"2024-03-15T05:44:12Z"}
weaviate-node-1-1 | {"level":"info","msg":" memberlist: Suspect node2 has failed, no acks received","time":"2024-03-15T05:44:14Z"}
weaviate-node-1-1 | {"level":"info","msg":" memberlist: Marking node2 as failed, suspect timeout reached (0 peer confirmations)","time":"2024-03-15T05:44:15Z"}
weaviate-node-1-1 | {"level":"debug","msg":" memberlist: Failed UDP ping: node2 (timeout reached)","time":"2024-03-15T05:44:15Z"}
weaviate-node-1-1 | {"level":"info","msg":" memberlist: Suspect node2 has failed, no acks received","time":"2024-03-15T05:44:18Z"}
weaviate-node-1-1 | {"level":"debug","msg":" memberlist: Stream connection from=10.12.226.153:53962","time":"2024-03-15T05:44:40Z"}
weaviate-node-1-1 | {"level":"debug","msg":" memberlist: Stream connection from=10.12.226.153:34830","time":"2024-03-15T05:45:12Z"}
weaviate-node-1-1 | {"level":"debug","msg":" memberlist: Failed UDP ping: node2 (timeout reached)","time":"2024-03-15T05:45:14Z"}
weaviate-node-1-1 | {"level":"info","msg":" memberlist: Suspect node2 has failed, no acks received","time":"2024-03-15T05:45:18Z"}
weaviate-node-1-1 | {"level":"debug","msg":" memberlist: Failed UDP ping: node2 (timeout reached)","time":"2024-03-15T05:45:19Z"}
weaviate-node-1-1 | {"level":"info","msg":" memberlist: Marking node2 as failed, suspect timeout reached (0 peer confirmations)","time":"2024-03-15T05:45:22Z"}
weaviate-node-1-1 | {"level":"info","msg":" memberlist: Suspect node2 has failed, no acks received","time":"2024-03-15T05:45:24Z"}
weaviate-node-1-1 | {"level":"debug","msg":" memberlist: Stream connection from=10.12.226.153:32960","time":"2024-03-15T05:45:44Z"}
weaviate-node-1-1 | {"level":"debug","msg":" memberlist: Stream connection from=10.12.226.153:56040","time":"2024-03-15T05:46:16Z"}
weaviate-node-1-1 | {"level":"debug","msg":" memberlist: Failed UDP ping: node2 (timeout reached)","time":"2024-03-15T05:46:17Z"}
weaviate-node-1-1 | {"level":"info","msg":" memberlist: Suspect node2 has failed, no acks received","time":"2024-03-15T05:46:23Z"}
weaviate-node-1-1 | {"level":"debug","msg":" memberlist: Failed UDP ping: node2 (timeout reached)","time":"2024-03-15T05:46:24Z"}

```

The log from node 2:

```auto
[+] Running 2/1
 ✔ Network weaviate_testing_weaviate Created 0.2s 
 ✔ Container weaviate_testing-weaviate-node-2-1 Created 0.0s 
Attaching to weaviate-node-2-1
weaviate-node-2-1 | {"action":"startup","level":"debug","msg":"created startup context, nothing done so far","startup_time_left":"59m59.997878536s","time":"2024-03-15T05:44:08Z"}
weaviate-node-2-1 | {"action":"startup","default_vectorizer_module":"none","level":"info","msg":"the default vectorizer modules is set to \"none\", as a result all new schema classes without an explicit vectorizer setting, will use this vectorizer","time":"2024-03-15T05:44:08Z"}
weaviate-node-2-1 | {"action":"startup","auto_schema_enabled":true,"level":"info","msg":"auto schema enabled setting is set to \"true\"","time":"2024-03-15T05:44:08Z"}
weaviate-node-2-1 | {"action":"startup","level":"debug","msg":"config loaded","startup_time_left":"59m59.997113417s","time":"2024-03-15T05:44:08Z"}
weaviate-node-2-1 | {"action":"startup","level":"debug","msg":"configured OIDC and anonymous access client","startup_time_left":"59m59.997089937s","time":"2024-03-15T05:44:08Z"}
weaviate-node-2-1 | {"action":"startup","level":"debug","msg":"initialized schema","startup_time_left":"59m59.997072807s","time":"2024-03-15T05:44:08Z"}
weaviate-node-2-1 | {"level":"debug","msg":" memberlist: Initiating push/pull sync with: 10.12.226.225:7100","time":"2024-03-15T05:44:08Z"}
weaviate-node-2-1 | {"action":"startup","level":"debug","msg":"startup routine complete","time":"2024-03-15T05:44:08Z"}
weaviate-node-2-1 | {"level":"info","msg":"No resource limits set, weaviate will use all available memory and CPU. To limit resources, set LIMIT_RESOURCES=true","time":"2024-03-15T05:44:08Z"}
weaviate-node-2-1 | {"action":"startup","level":"debug","msg":"start registering modules","time":"2024-03-15T05:44:08Z"}
weaviate-node-2-1 | {"action":"startup","level":"debug","msg":"completed registering modules","time":"2024-03-15T05:44:08Z"}
weaviate-node-2-1 | {"level":"debug","msg":" memberlist: Failed UDP ping: node1 (timeout reached)","time":"2024-03-15T05:44:09Z"}
weaviate-node-2-1 | {"level":"info","msg":" memberlist: Suspect node1 has failed, no acks received","time":"2024-03-15T05:44:10Z"}
weaviate-node-2-1 | {"level":"debug","msg":" memberlist: Failed UDP ping: node1 (timeout reached)","time":"2024-03-15T05:44:11Z"}
weaviate-node-2-1 | {"level":"info","msg":" memberlist: Suspect node1 has failed, no acks received","time":"2024-03-15T05:44:13Z"}
weaviate-node-2-1 | {"level":"debug","msg":" memberlist: Failed UDP ping: node1 (timeout reached)","time":"2024-03-15T05:44:13Z"}
weaviate-node-2-1 | {"level":"info","msg":" memberlist: Marking node1 as failed, suspect timeout reached (0 peer confirmations)","time":"2024-03-15T05:44:14Z"}
weaviate-node-2-1 | {"level":"info","msg":" memberlist: Suspect node1 has failed, no acks received","time":"2024-03-15T05:44:16Z"}
weaviate-node-2-1 | {"action":"startup","error":"could not load or initialize schema: sync schema with other nodes in the cluster: read schema: open transaction: broadcast open transaction: host \"172.31.0.2:7101\": send http request: Post \"http://172.31.0.2:7101/schema/transactions/\": context deadline exceeded","level":"fatal","msg":"could not initialize schema manager","time":"2024-03-15T05:44:38Z"}
weaviate-node-2-1 exited with code 0

```

And I have tried your suggestion here [Can only Docker Compose be used for multi node deployment?](https://forum.weaviate.io/t/can-only-docker-compose-be-used-for-multi-node-deployment/517), but still got same issues.

I have tested the communication between the two nodes and they can connect with each other through TCP and UDP.

Do you have any clue why this is happening and suggestion on how to resolve this? Thanks very much!

---

<div class="post-metadata">

**Author:** ![DudaNogueira](https://yyz1.discourse-cdn.com/flex027/user_avatar/forum.weaviate.io/dudanogueira/32/7846_2.png) [@DudaNogueira](https://forum.weaviate.io/u/DudaNogueira)\
**Post date:** [March 15, 2024, 12:54pm UTC](https://forum.weaviate.io/t/docker-compose-with-multi-node-deployment-issue/1720/2 "2024-03-15T12:54:34Z")

</div>

Hi @fenglizzz !! Welcome to our community 🤗

It’s not a good idea to reference the CLUSTER\_JOIN by IPs (or any container to container connection inside docker/k8s to be fair), as those will eventually change down the road, or maybe even after a reboot.

Here are some steps to get this party going. 🥳

First, let’s create a docker attachable network:

```auto
docker network create --attachable weaviate

```

Now, using the [latest docker compose](https://weaviate.io/developers/weaviate/installation/docker-compose#sample-docker-compose-file), and using this doc to [adjust it to a multi node setup](https://weaviate.io/developers/weaviate/installation/docker-compose#multi-node-setup), a came up with those two files:

`docker-compose-0.yaml`

```auto
---
version: '3.4'
services:
  weaviate-0:
    command:
    - --host
    - 0.0.0.0
    - --port
    - '8080'
    - --scheme
    - http
    image: cr.weaviate.io/semitechnologies/weaviate:1.24.3
    ports:
    - 8080:8080
    - 50051:50051
    volumes:
    - ./data-node0:/var/lib/weaviate
    restart: on-failure:0
    environment:
      QUERY_DEFAULTS_LIMIT: 25
      AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
      PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
      DEFAULT_VECTORIZER_MODULE: 'none'
      ENABLE_MODULES: 'text2vec-cohere,text2vec-huggingface,text2vec-palm,text2vec-openai,generative-openai,generative-cohere,generative-palm,ref2vec-centroid,reranker-cohere,qna-openai'
      CLUSTER_HOSTNAME: 'node0'
      CLUSTER_GOSSIP_BIND_PORT: '7100'
      CLUSTER_DATA_BIND_PORT: '7101'      
    networks:
      - weaviate

networks:
  weaviate:
    attachable: true
...

```

let’s first run it and check everything

```auto
docker compose -f docker-compose-0.yaml

```

and check if our founder node is up:

```auto
❯ curl localhost:8080/v1/nodes
{"nodes":[{"batchStats":{"queueLength":0,"ratePerSecond":0},"gitHash":"7e5d3aa","name":"node0","shards":null,"status":"HEALTHY","version":"1.24.3"}]}

```

now, let’s spin up the second node, node1 🙂

here is the `docker-compose-1.yaml`

```auto
---
version: '3.4'
services:
  weaviate-1:
    command:
    - --host
    - 0.0.0.0
    - --port
    - '8080'
    - --scheme
    - http
    image: cr.weaviate.io/semitechnologies/weaviate:1.24.3
    ports:
    - 8081:8080
    - 50052:50051
    volumes:
    - ./data-node1:/var/lib/weaviate
    restart: on-failure:0
    environment:
      QUERY_DEFAULTS_LIMIT: 25
      AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
      PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
      DEFAULT_VECTORIZER_MODULE: 'none'
      ENABLE_MODULES: 'text2vec-cohere,text2vec-huggingface,text2vec-palm,text2vec-openai,generative-openai,generative-cohere,generative-palm,ref2vec-centroid,reranker-cohere,qna-openai'
      CLUSTER_HOSTNAME: 'node1'
      CLUSTER_GOSSIP_BIND_PORT: '7102'
      CLUSTER_DATA_BIND_PORT: '7103'
      CLUSTER_JOIN: 'weaviate-0:7100'
    networks:
      - weaviate

networks:
  weaviate:
    attachable: true
...

```

The only differences:

- Service name
- Port mappings (so they don’t conflict)
- Folder for mounting data
- CLUSTER\_HOSTNAME
- Node1 has CLUSTER\_JOIN pointing to the reachable hostname of Node0

Now, you can spin the second node:

```auto
docker compose -f docker-compose-0.yaml up -d

```

And now check the status of your cluster:

```auto
❯ curl localhost:8080/v1/nodes
{
   "nodes":[
      {
         "batchStats":{
            "queueLength":0,
            "ratePerSecond":0
         },
         "gitHash":"7e5d3aa",
         "name":"node0",
         "shards":null,
         "status":"HEALTHY",
         "version":"1.24.3"
      },
      {
         "batchStats":{
            "queueLength":0,
            "ratePerSecond":0
         },
         "gitHash":"7e5d3aa",
         "name":"node1",
         "shards":null,
         "status":"HEALTHY",
         "version":"1.24.3"
      }
   ]
}

```

Let me know if this helps!

And don’t forget to check out events page!

> **[Events & Webinars | Weaviate - Vector Database](https://weaviate.io/community/events)**
>
> Join us at conferences, meetups, webinars or workshops

---

<div class="post-metadata">

**Author:** ![fenglizzz](https://yyz1.discourse-cdn.com/flex027/user_avatar/forum.weaviate.io/fenglizzz/32/1134_2.png) [@fenglizzz](https://forum.weaviate.io/u/fenglizzz)\
**Post date:** [March 18, 2024, 1:55am UTC](https://forum.weaviate.io/t/docker-compose-with-multi-node-deployment-issue/1720/3 "2024-03-18T01:55:46Z")

</div>

> [@DudaNogueira](#):
>
> ```auto
> networks:
> weaviate:
> attachable: true
> 
> ```

HI thanks very much for the detailed steps. I followed exactly as what you said here. But when I run on the second node. There is one error with"action":“cluster\_attempt\_join”,“error”:“lookup weaviate-0 on 127.0.0.11:53: no such host”,“level”:“warning”,“msg”:"specified hostname to join cluster cannot be resolved. The log on the second node is shown as following.

```auto
{"action":"startup","default_vectorizer_module":"none","level":"info","msg":"the default vectorizer modules is set to \"none\", as a result all new schema classes without an explicit vectorizer setting, will use this vectorizer","time":"2024-03-18T01:33:51Z"}
{"action":"startup","auto_schema_enabled":true,"level":"info","msg":"auto schema enabled setting is set to \"true\"","time":"2024-03-18T01:33:51Z"}
{"action":"cluster_attempt_join","error":"lookup weaviate-0 on 127.0.0.11:53: no such host","level":"warning","msg":"specified hostname to join cluster cannot be resolved. This is fineif this is the first node of a new cluster, but problematic otherwise.","remote_hostname":"weaviate-0:7100","time":"2024-03-18T01:33:51Z"}
{"level":"info","msg":"No resource limits set, weaviate will use all available memory and CPU. To limit resources, set LIMIT_RESOURCES=true","time":"2024-03-18T01:33:51Z"}
{"level":"warning","msg":"Multiple vector spaces are present, GraphQL Explore and REST API list objects endpoint module include params has been disabled as a result.","time":"2024-03-18T01:33:51Z"}
{"action":"grpc_startup","level":"info","msg":"grpc server listening at [::]:50051","time":"2024-03-18T01:33:51Z"}
{"action":"restapi_management","level":"info","msg":"Serving weaviate at http://[::]:8080","time":"2024-03-18T01:33:51Z"}
{"action":"telemetry_push","level":"info","msg":"telemetry started","payload":"\u0026{MachineID:fbfc895b-e0b2-4d44-b191-dfb5965fbdea Type:INIT Version:1.24.3 Modules:generative-cohere,generative-openai,generative-palm,qna-openai,ref2vec-centroid,reranker-cohere,text2vec-cohere,text2vec-huggingface,text2vec-openai,text2vec-palm NumObjects:0 OS:linux Arch:amd64}","time":"2024-03-18T01:33:52Z"}

```

---

<div class="post-metadata">

**Author:** ![fenglizzz](https://yyz1.discourse-cdn.com/flex027/user_avatar/forum.weaviate.io/fenglizzz/32/1134_2.png) [@fenglizzz](https://forum.weaviate.io/u/fenglizzz)\
**Post date:** [March 18, 2024, 3:17am UTC](https://forum.weaviate.io/t/docker-compose-with-multi-node-deployment-issue/1720/4 "2024-03-18T03:17:42Z")

</div>

since these are running on to different nodes. How does it know which node that weaviate-0 is running on if we just use the ‘weaviate-0’ instead of IP please?

---

<div class="post-metadata">

**Author:** ![DudaNogueira](https://yyz1.discourse-cdn.com/flex027/user_avatar/forum.weaviate.io/dudanogueira/32/7846_2.png) [@DudaNogueira](https://forum.weaviate.io/u/DudaNogueira)\
**Post date:** [March 18, 2024, 1:00pm UTC](https://forum.weaviate.io/t/docker-compose-with-multi-node-deployment-issue/1720/5 "2024-03-18T13:00:33Z")

</div>

Hi @fenglizzz !

it will infer from the service name.

Every container in a docker network will use it’s service name as the hostname, as well as projectname-container-[1-NN]

project name, if not defined, will be the folder where it runs.

so for example, if you run those docker compose in a folder called feng, the second hostname you could use are:

- feng-weaviate-0-1
- feng-weaviate-1-1

Before running those, can completely remove that stack?

you can do it with:  
**WARNING** : this command removes everything from the stack, including docker volumes. As this docker compose volumes are binded to a folder, it will not delete it.

```auto
docker compose down -v

```

Let me know if this works.

THanks!

---

<div class="post-metadata">

**Author:** ![fenglizzz](https://yyz1.discourse-cdn.com/flex027/user_avatar/forum.weaviate.io/fenglizzz/32/1134_2.png) [@fenglizzz](https://forum.weaviate.io/u/fenglizzz)\
**Post date:** [March 18, 2024, 2:01pm UTC](https://forum.weaviate.io/t/docker-compose-with-multi-node-deployment-issue/1720/6 "2024-03-18T14:01:09Z")

</div>

HI thanks very much for the response. I am running under the folder weaviate\_testing. The first node is started as:

```auto
[+] Running 2/1
 ✔ Network weaviate_testing_weaviate Created 0.2s 
 ✔ Container weaviate_testing-weaviate-0-1 Created 0.0s 
Attaching to weaviate-0-1
weaviate-0-1 | {"action":"startup","default_vectorizer_module":"none","level":"info","msg":"the default vectorizer modules is set to \"none\", as a result all new schema classes without an explicit vectorizer setting, will use this vectorizer","time":"2024-03-18T13:54:12Z"}
weaviate-0-1 | {"action":"startup","auto_schema_enabled":true,"level":"info","msg":"auto schema enabled setting is set to \"true\"","time":"2024-03-18T13:54:12Z"}
weaviate-0-1 | {"level":"info","msg":"No resource limits set, weaviate will use all available memory and CPU. To limit resources, set LIMIT_RESOURCES=true","time":"2024-03-18T13:54:12Z"}
weaviate-0-1 | {"action":"grpc_startup","level":"info","msg":"grpc server listening at [::]:50051","time":"2024-03-18T13:54:12Z"}
weaviate-0-1 | {"action":"restapi_management","level":"info","msg":"Serving weaviate at http://[::]:8080","time":"2024-03-18T13:54:12Z"}
weaviate-0-1 | {"action":"telemetry_push","level":"info","msg":"telemetry started","payload":"\u0026{MachineID:e140af08-5a21-45dc-a643-99c87d0865a6 Type:INIT Version:1.24.3 Modules: NumObjects:0 OS:linux Arch:amd64}","time":"2024-03-18T13:54:13Z"}

```

so the hostname should be ‘weaviate\_testing-weaviate-0-1’ right? Then in the second node’s compose file I set

```auto
 CLUSTER_JOIN: 'weaviate_testing-weaviate-0-1:7100'

```

but after run compose up, I still got the following error:

```auto
[+] Running 2/1
 ✔ Network weaviate_testing_weaviate Created 0.2s 
 ✔ Container weaviate_testing-weaviate-1-1 Created 0.0s 
Attaching to weaviate-1-1
weaviate-1-1 | {"action":"startup","default_vectorizer_module":"none","level":"info","msg":"the default vectorizer modules is set to \"none\", as a result all new schema classes without an explicit vectorizer setting, will use this vectorizer","time":"2024-03-18T13:55:06Z"}
weaviate-1-1 | {"action":"startup","auto_schema_enabled":true,"level":"info","msg":"auto schema enabled setting is set to \"true\"","time":"2024-03-18T13:55:06Z"}
weaviate-1-1 | {"action":"cluster_attempt_join","error":"lookup weaviate_testing-weaviate-0-1 on 127.0.0.11:53: no such host","level":"warning","msg":"specified hostname to join cluster cannot be resolved. This is fineif this is the first node of a new cluster, but problematic otherwise.","remote_hostname":"weaviate_testing-weaviate-0-1:7100","time":"2024-03-18T13:55:06Z"}
weaviate-1-1 | {"level":"info","msg":"No resource limits set, weaviate will use all available memory and CPU. To limit resources, set LIMIT_RESOURCES=true","time":"2024-03-18T13:55:06Z"}
weaviate-1-1 | {"action":"grpc_startup","level":"info","msg":"grpc server listening at [::]:50051","time":"2024-03-18T13:55:06Z"}
weaviate-1-1 | {"action":"restapi_management","level":"info","msg":"Serving weaviate at http://[::]:8080","time":"2024-03-18T13:55:06Z"}
weaviate-1-1 | {"action":"telemetry_push","level":"info","msg":"telemetry started","payload":"\u0026{MachineID:e43c6368-fdfb-4006-bebb-61d907771ccd Type:INIT Version:1.24.3 Modules: NumObjects:0 OS:linux Arch:amd64}","time":"2024-03-18T13:55:07Z"}

```

---

<div class="post-metadata">

**Author:** ![DudaNogueira](https://yyz1.discourse-cdn.com/flex027/user_avatar/forum.weaviate.io/dudanogueira/32/7846_2.png) [@DudaNogueira](https://forum.weaviate.io/u/DudaNogueira)\
**Post date:** [March 18, 2024, 5:47pm UTC](https://forum.weaviate.io/t/docker-compose-with-multi-node-deployment-issue/1720/7 "2024-03-18T17:47:20Z")

</div>

After spinning the first node, can you read the node status?

```auto
curl localhost:8080/v1/nodes

```

one thing to try is to clearing everything (including the network) and start over:

```auto
docker compose -f docker-compose-0.yaml -f docker-compose-1.yaml down -v
docker network rm weaviate
rm -rf data-node0 data-node1

```

Now, create again

```auto
docker network create --attachable weaviate
docker compose -f docker-compose-0.yaml -f docker-compose-1.yaml up -d

```

This is how you can check the connectivity from one node to another:

```auto
docker compose -f docker-compose-0.yaml exec -ti weaviate-0 wget -qO - http://weaviate-1:8080/v1/nodes

```

You are running a wget from within the container weaviate-o, pointing to weaviate-1.

Let me know if this helps, and feel free to ping me on our lack if you need further assistance.

THanks!

---

<div class="post-metadata">

**Author:** ![Ashok\_Raja](https://avatars.discourse-cdn.com/v4/letter/a/a8b319/32.png) [@Ashok\_Raja](https://forum.weaviate.io/u/Ashok_Raja)\
**Post date:** [March 18, 2024, 7:54pm UTC](https://forum.weaviate.io/t/docker-compose-with-multi-node-deployment-issue/1720/8 "2024-03-18T19:54:36Z")

</div>

@DudaNogueira,

If I’m not wrong, you are sharing the steps to spawn multiple weaviate nodes in one and the same physical machines, attach them to a common docker network and establish the cluster network.

But the issue lies, say, in spawning three weaviate nodes in three physical machines (one node per machine) and then trying to establish the cluster network. Thats where we face the following issue:

> {“action”:“cluster\_attempt\_join”,“error”:“lookup weaviate\_testing-weaviate-0-1 on 127.0.0.11:53: no such host”,“level”:“warning”,“msg”:“specified hostname to join cluster cannot be resolved. This is fine if this is the first node of a new cluster, but problematic otherwise.”,“remote\_hostname”:“weaviate\_testing-weaviate-0-1:7100”,“time”:“2024-03-18T13:55:06Z”}

Requesting your assistance in this regard.

---

<div class="post-metadata">

**Author:** ![DudaNogueira](https://yyz1.discourse-cdn.com/flex027/user_avatar/forum.weaviate.io/dudanogueira/32/7846_2.png) [@DudaNogueira](https://forum.weaviate.io/u/DudaNogueira)\
**Post date:** [March 18, 2024, 9:37pm UTC](https://forum.weaviate.io/t/docker-compose-with-multi-node-deployment-issue/1720/9 "2024-03-18T21:37:21Z")

</div>

Hi @Ashok_Raja ! Welcome to our community 🤗

Oh… That’s indeed different.  
Sorry @fenglizzz !! I totally missed the “two machines” on the beginning 🙈

That’s definitely some connectivity issues between this machines.

And yes, on that case the IP address will be needed. Sorry again @fenglizzz😆

one thing you could do to test the connectivity:

```auto
docker compose exec -ti weaviate sh
apk add busybox-extras
telnet ip-of-the-other-machine:7100

```

Let me know if this helps.

---

<div class="post-metadata">

**Author:** ![jasper2077](https://yyz1.discourse-cdn.com/flex027/user_avatar/forum.weaviate.io/jasper2077/32/2816_2.png) [@jasper2077](https://forum.weaviate.io/u/jasper2077)\
**Post date:** [November 20, 2024, 6:40am UTC](https://forum.weaviate.io/t/docker-compose-with-multi-node-deployment-issue/1720/10 "2024-11-20T06:40:12Z")

</div>

Hello, I’m currently facing the same issue. Have you managed to resolve it
