У меня есть dockerfile, который должен запускать сценарий оболочки в ENTRYPOINT, но кажется, что код не работает.
Я попытался поиграть с Шебангом с помощью #! / Bin / sh, #! / Bin / bash или полностью удален, как описано здесь: Stackoverflow . Я также использовал ENTRYPOINT ИЛИ CMD. Кроме того, я конвертирую каждый файл в unix с помощью dos2unix, но каждый раз получаю один и тот же результат.
Образ вызывается в бродячем файле, который создается с помощью Dockerfile
config.vm.provision "docker" do |d|
d.build_image "/vagrant",
args: "-t keycloak-image"
d.run "keycloak",
image: "keycloak-image:latest",
args: "-p 8080:8080 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin -e DB_VENDOR=H2"
end
Это текущий Dockerfile
FROM jboss/keycloak:latest
USER root
# copy from /setup into /opt/jboss/setup
COPY /setup /opt/jboss/setup
#use opt/jboss/setup as working directory
WORKDIR /opt/jboss/setup
#take he run and load script and convert it to a unix script by deleting /r with the tr pipe and -d (delete)
RUN cat /opt/jboss/setup/run.sh | tr -d '\r' > /opt/jboss/setup/run.sh
RUN cat /opt/jboss/setup/load.sh | tr -d '\r' > /opt/jboss/setup/load.sh
ENTRYPOINT ["sh","./run.sh"]
и текущий скрипт оболочки
#!/bin/sh
function is_keycloak_running {
local http_code=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:${KEYCLOAK_PORT}/auth/admin/realms)
if [[ $http_code -eq 401 ]]; then
return 0
else
return 1
fi
}
function configure_keycloak {
until is_keycloak_running; do
echo Keycloak still not running, waiting 5 seconds
sleep 5
done
echo Keycloak is running, proceeding with configuration
echo Now run load script inside run script
./load.sh
}
if [ ! -f ${JBOSS_HOME}/standalone/data/docker-container-configuration-done ]; then
touch ${JBOSS_HOME}/standalone/data/docker-container-configuration-done
configure_keycloak &
fi
# this is not in a volume, at least not by default, so we need to replace the port every time the server runs
sed -i -e 's/<socket-binding name="http".*/<socket-binding name="http" port="'$KEYCLOAK_PORT'"\/>/' ${JBOSS_HOME}/standalone/configuration/standalone.xml
${JBOSS_HOME}/bin/add-user-keycloak.sh --user $KEYCLOAK_USER --password $KEYCLOAK_PASSWORD
${JBOSS_HOME}/bin/standalone.sh -b 0.0.0.0
А на выходе
==> default: Step 2/7 : USER root
==> default: ---> Running in 3505173391f1
==> default: Removing intermediate container 3505173391f1
==> default: ---> c92194427482
==> default: Step 3/7 : COPY /setup /opt/jboss/setup
==> default: ---> faea269e6649
==> default: Step 4/7 : WORKDIR /opt/jboss/setup
==> default: ---> Running in db7ad91dba9e
==> default: Removing intermediate container db7ad91dba9e
==> default: ---> 3554249590b1
==> default: Step 5/7 : RUN cat /opt/jboss/setup/run.sh | tr -d '\r' > /opt/jboss/setup/run.sh
==> default: ---> Running in 20f8569e305d
==> default: Removing intermediate container 20f8569e305d
==> default: ---> 16b5d0c7a147
==> default: Step 6/7 : RUN cat /opt/jboss/setup/load.sh | tr -d '\r' > /opt/jboss/setup/load.sh
==> default: ---> Running in 0fc35b4e9d51
==> default: Removing intermediate container 0fc35b4e9d51
==> default: ---> 6e7f159029b0
==> default: Step 7/7 : CMD ["sh","./run.sh"]
==> default: ---> Running in f1209cc305e3
==> default: Removing intermediate container f1209cc305e3
==> default: ---> ed9f8dd4cc22
==> default: Successfully built ed9f8dd4cc22
==> default: Successfully tagged keycloak-image:latest
==> default: Starting Docker containers...
==> default: -- Container: keycloak
Как вы видите, на выходе нет эха. Кроме того, программа не работает на локальном хосте: 8080, но если я удалю ENTRYPOINT, программа будет доступна. Таким образом, скрипт не работает, кто-нибудь есть идея?
Спасибо за любую помощь
Matthias