MrMinty
MrMinty

Reputation: 83

Docker Container Running Flink SQL Client Shuts Down Immediately Despite Interactive Setup

I'm trying to run a Flink SQL client inside a Docker container using a custom Dockerfile and entrypoint script, but the container shuts down immediately despite being set up to run the SQL client interactively. The Dockerfile is based on flink:1.19.0-scala_2.12-java11 and includes necessary Flink SQL connector libraries. My entrypoint script (docker-entrypoint.sh) is supposed to start the SQL client and keep the container alive with tail -f /dev/null. However, the container exits right after starting.

Something that I notices is that hen I switch the commented and uncommented lines in the Dockerfile between using /opt/sql-client/docker-entrypoint.sh and /docker-entrypoint.sh, the container stays up, but I'm then unable to access the SQL client or Flink's UI. Hopefully someone can help me figure this issue that I'm having.

These are my configuration files:

docker-compose.yml

 jobmanager:
    container_name: jobmanager
    build:
      context: .
      dockerfile: Dockerfile-sql
    ports:
      - 8081:8081
    command: jobmanager
    environment:
      - |
        FLINK_PROPERTIES=
        jobmanager.rpc.address: jobmanager
    networks:
      - datalou

  taskmanager:
    container_name: taskmanager
    build:
      context: .
      dockerfile: Dockerfile-sql
    depends_on:
      - jobmanager
    command: taskmanager
    environment:
      - |
        FLINK_PROPERTIES=
        jobmanager.rpc.address: jobmanager
        taskmanager.numberOfTaskSlots: 20
    networks:
      - datalou      

  sql-client:
    container_name: sql-client
    build:
      context: .
      dockerfile: Dockerfile-sql
    # commented out so they don't conflict with docker-entrypoint.sh and sql-client.sh
    # command:
    #   - /opt/flink/bin/sql-client.sh
    #   - embedded
    #   - -i # -l
    #   - /opt/sql-client/lib
    depends_on:
      - jobmanager
    environment:
      - FLINK_JOBMANAGER_HOST=jobmanager
      - |
        FLINK_PROPERTIES=
        jobmanager.rpc.address: jobmanager
        rest.address: jobmanager
    networks:
     - datalou

dockerfile-sql:

FROM flink:1.19.0-scala_2.12-java11

COPY sql-client.sh /opt/sql-client/

RUN mkdir -p /opt/sql-client/lib

# Download connector libraries
RUN wget -P /opt/flink/lib/ https://repo.maven.apache.org/maven2/org/apache/flink/flink-sql-connector-kafka/1.19.0/flink-sql-connector-kafka-1.19.0.jar; \
    wget -P /opt/flink/lib/ https://repo.maven.apache.org/maven2/org/apache/flink/flink-sql-connector-kafka/3.2.0-1.19/flink-sql-connector-kafka-3.2.0-1.19.jar; \    
    wget -P /opt/flink/lib/ https://repo.maven.apache.org/maven2/org/apache/flink/flink-connector-jdbc/3.1.1-1.17/flink-connector-jdbc-3.1.1-1.17.jar; \
    wget -P /opt/flink/lib/ https://repo.maven.apache.org/maven2/org/apache/flink/flink-json/1.17.1/flink-json-1.17.1.jar; \
    wget -P /opt/flink/lib/ https://jdbc.postgresql.org/download/postgresql-42.5.4.jar; \
    wget -P /opt/flink/lib/ https://repo.maven.apache.org/maven2/org/apache/flink/flink-sql-avro-confluent-registry/1.19.0/flink-sql-avro-confluent-registry-1.19.0.jar

WORKDIR /opt/sql-client
ENV SQL_CLIENT_HOME /opt/sql-client

COPY docker-entrypoint.sh /opt/sql-client

# RUN chmod +x /opt/sql-client/docker-entrypoint.sh
RUN chmod +x /docker-entrypoint.sh 

# ENTRYPOINT ["/opt/sql-client/docker-entrypoint.sh"]
ENTRYPOINT ["/docker-entrypoint.sh"]

sql-client.sh

#!/bin/bash

${FLINK_HOME}/bin/sql-client.sh embedded -l ${SQL_CLIENT_HOME}/lib -i # -i : interactive mode

docker-entrypoint.sh

#!/bin/bash

# Start the SQL client in interactive mode
/opt/sql-client/sql-client.sh

# Keep the container running
tail -f /dev/null

Flink's terminal:

Flink SQL> 
Shutting down the session...
done.

Upvotes: 0

Views: 181

Answers (0)

Related Questions