skip to Main Content

I am running a docker file to execute a debezium service as entrypoint.

It works fine and executes debezium service when I use the exact file path as parameter to Entrypoint command in my docker file

command in docker file

ENTRYPOINT ["kafka_2.12-2.6.2/bin/connect-standalone.sh","kafka_2.12-2.6.2/config/connect-standalone.properties","kafka_2.12-2.6.2/worker.properties"]

But it fails when I pass the file names as environment variable

command in docker file

ENTRYPOINT [${connect_standalone},${connect_standalone_properties},${worker_properties}]

docker run command

sudo docker run -it -e connect_standalone=kafka_2.12-2.6.2/bin/connect-standalone.sh -e connect_standalone_properties=kafka_2.12-2.6.2/config/connect-standalone.properties -e worker_properties=kafka_2.12-2.6.2/worker.properties –name cloud1 cloud9-image:latest

output of the docker run command

/bin/sh: [kafka_2.12-2.6.2/bin/connect-standalone.sh,kafka_2.12-2.6.2/config/connect-standalone.properties,kafka_2.12-2.6.2/worker.properties]: No such file or directory

Somehow it always goes to /bin/sh even though I have set working directory as root of my container where the kafka_2.12-2.6.2 directory is present

2

Answers


  1. Replacing environment variables in a command is the job of the shell. When you use the exec form of the ENTRYPOINT statement, there is no shell to replace them, so it doesn’t work.

    You need to use the shell form which starts a shell to run the command. Then then shell will replace the variables and it should work.

    So instead of

    ENTRYPOINT [${connect_standalone},${connect_standalone_properties},${worker_properties}]
    

    do

    ENTRYPOINT ${connect_standalone} ${connect_standalone_properties} ${worker_properties}
    

    More info here: https://docs.docker.com/engine/reference/builder/#entrypoint

    Login or Signup to reply.
  2. May I suggest an alternative?

    Your executable and the worker properties don’t really need to change, so there’s no reason to use environment variables here.

    If you want to change worker properties using environment variables, then that’s what existing Connect containers can do…

    WORKDIR "kafka_2.12-2.6.2" 
    ENTRYPOINT ["bin/connect-standalone.sh", "config/connect-standalone.properties"]
    

    Now, if you want the option to run any number of connectors at runtime, but default to a specific one, then that’s a CMD

    CMD ["connector.properties"] 
    

    Build the image

    If you want to use a different file, mount it as a Docker volume over kafka_2.12-2.6.2/connector.properties

    If you want to run multiple connectors, mount a directory of property files

    docker run --rm -v $HOME/connectors:/work:ro your_image /work/connector-1.properties /work/connector-2.properties
    

    Remove the CMD if you don’t want a default connector

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search