# connection failed in ReadOnly operational mode 

**URL:** <https://forum.weaviate.io/t/connection-failed-in-readonly-operational-mode/22666>\
**Category:** Support\
**Created:** [October 26, 2026, 4:34pm UTC](https://forum.weaviate.io/t/connection-failed-in-readonly-operational-mode/22666 "2026-10-26T16:34:15Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Dharanish](https://yyz1.discourse-cdn.com/flex027/user_avatar/forum.weaviate.io/dharanish/32/659_2.png) [@Dharanish](https://forum.weaviate.io/u/Dharanish)\
**Post date:** [October 26, 2026, 4:34pm UTC](https://forum.weaviate.io/t/connection-failed-in-readonly-operational-mode/22666/1 "2026-10-26T16:34:15Z")

</div>

### Description

I set OPERATIONAL\_MODE: ‘_ReadOnly_’ and started server . Then tried to connect to python client raise **WeaviateGRPCUnavailableError**.

### Server Setup Information

- Weaviate Server Version: 1.39.12
- Deployment Method: docker
- Multi Node? Number of Running Nodes: 3
- Client Language and Version: python , 4.23.1
- Multitenancy?: None

**Docker config (node1 only)**  
weaviate-node-1:  
init: true  
command:  
- --host  
- 0.0.0.0  
- --port  
- ‘8080’  
- --scheme  
- http  
image: weaviate:1.39.12  
ports:  
- 8080:8080  
- 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’  
CLUSTER\_HOSTNAME: ‘node1’  
CLUSTER\_GOSSIP\_BIND\_PORT: ‘7100’  
CLUSTER\_DATA\_BIND\_PORT: ‘7101’  
RAFT\_JOIN: ‘node1,node2,node3’  
RAFT\_BOOTSTRAP\_EXPECT: 3  
OPERATIONAL\_MODE : ‘ReadOnly’  
AUTHENTICATION\_APIKEY\_ENABLED : ‘false’

**Error logs**

```auto
Traceback (most recent call last):
  File "/opt/miniconda3/envs/myenv/lib/python3.13/site-packages/weaviate/connect/v4.py", line 313, in _ping_grpc
    res = self._grpc_channel.unary_unary(
    ...<2 lines>...
        response_deserializer=health_weaviate_pb2.WeaviateHealthCheckResponse.FromString,
    )(health_weaviate_pb2.WeaviateHealthCheckRequest(), timeout=self.timeout_config.init)
  File "/opt/miniconda3/envs/myenv/lib/python3.13/site-packages/grpc/_channel.py", line 1159, in __call__
    return _end_unary_response_blocking(state, call, False, None)
  File "/opt/miniconda3/envs/myenv/lib/python3.13/site-packages/grpc/_channel.py", line 990, in _end_unary_response_blocking
    raise _InactiveRpcError(state) # pytype: disable=not-instantiable
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
grpc._channel._InactiveRpcError: <_InactiveRpcError of RPC that terminated with:
        status = StatusCode.UNAVAILABLE
        details = "read-only mode is enabled temporally at the config level: write operations are not allowed during this time"
        debug_error_string = "UNKNOWN:Error received from peer {grpc_message:"read-only mode is enabled temporally at the config level: write operations are not allowed during this time", grpc_status:14}"
>

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Users/dharan-19096/StudioProjects/warrsaou/script.py", line 3, in <module>
    client = weaviate.connect_to_custom(
        http_host="localhost",
    ...<6 lines>...
        skip_init_checks=False
    )
  File "/opt/miniconda3/envs/myenv/lib/python3.13/site-packages/weaviate/connect/helpers.py", line 347, in connect_to_custom
    return __connect(
        WeaviateClient(
    ...<12 lines>...
        )
    )
  File "/opt/miniconda3/envs/myenv/lib/python3.13/site-packages/weaviate/connect/helpers.py", line 371, in __connect
    raise e
  File "/opt/miniconda3/envs/myenv/lib/python3.13/site-packages/weaviate/connect/helpers.py", line 367, in __connect
    client.connect()
    ~~~~~~~~~~~~~~ ^^
  File "/opt/miniconda3/envs/myenv/lib/python3.13/site-packages/weaviate/client_executor.py", line 152, in connect
    return executor.execute(
           ~~~~~~~~~~~~~~~~ ^
        response_callback=lambda _: None,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        method=self._connection.connect,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/opt/miniconda3/envs/myenv/lib/python3.13/site-packages/weaviate/connect/executor.py", line 99, in execute
    return cast(T, exception_callback(e))
                   ~~~~~~~~~~~~~~~~~~ ^^^
  File "/opt/miniconda3/envs/myenv/lib/python3.13/site-packages/weaviate/connect/executor.py", line 38, in raise_exception
    raise e
  File "/opt/miniconda3/envs/myenv/lib/python3.13/site-packages/weaviate/connect/executor.py", line 80, in execute
    call = method(*args, **kwargs)
  File "/opt/miniconda3/envs/myenv/lib/python3.13/site-packages/weaviate/connect/v4.py", line 947, in connect
    raise e
  File "/opt/miniconda3/envs/myenv/lib/python3.13/site-packages/weaviate/connect/v4.py", line 943, in connect
    executor.result(self._ping_grpc("sync"))
                    ~~~~~~~~~~~~~~~ ^^^^^^^^
  File "/opt/miniconda3/envs/myenv/lib/python3.13/site-packages/weaviate/connect/v4.py", line 335, in _ping_grpc
    self.__handle_ping_exception(e)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^^^
  File "/opt/miniconda3/envs/myenv/lib/python3.13/site-packages/weaviate/connect/v4.py", line 346, in __handle_ping_exception
    raise WeaviateGRPCUnavailableError(
        f"v{self.server_version}", self._connection_params._grpc_address
    ) from e
weaviate.exceptions.WeaviateGRPCUnavailableError: 
Weaviate v1.39.12 makes use of a high-speed gRPC API as well as a REST API.
Unfortunately, the gRPC health check against Weaviate could not be completed.

This error could be due to one of several reasons:
- The gRPC traffic at the specified port is blocked by a firewall.
- gRPC is not enabled or incorrectly configured on the server or the client.
    - Please check that the server address and port (localhost:50051) are correct.
- your connection is unstable or has a high latency. In this case you can:
    - increase init-timeout in `weaviate.connect_to_local(additional_config=wvc.init.AdditionalConfig(timeout=wvc.init.Timeout(init=X)))`
    - disable startup checks by connecting using `skip_init_checks=True`

```

**Additional**  
Setting

> skip\_init\_checks=True

in client resolves the connection failure but it look like a workaround not a solution.
