Сеть Docker - Keycloak не может подключиться к postgresql, запущенному в отдельном экземпляре Docker - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть два док-контейнера, один работает с Keycloak 4.7.0.Final, а другой работает с Postgresql.

Keycloak Dockerfile

FROM jboss/keycloak:4.7.0.Final

ADD themes/mytheme /opt/jboss/keycloak/themes/healthjoiner

ADD modules /opt/jboss/keycloak/modules/system/layers/keycloak
ADD standalone-ha.xml /opt/jboss/keycloak/standalone/configuration/
ADD keycloak-config.json /opt/jboss/

RUN mkdir -p $JBOSS_HOME/standalone/data

CMD ["-b", "0.0.0.0", "-Dkeycloak.migration.action=import -Dkeycloak.migration.provider=singleFile -Dkeycloak.migration.file=/opt/jboss/keycloak-config.json -Dkeycloak.migration.strategy=OVERWRITE_EXISTING"]

Postgres Dockerfile

FROM postgres:9.5

# set root user details
ENV POSTGRES_PASSWORD=postgres
ENV POSTGRES_USER=postgres

ADD scripts/init.sql /docker-entrypoint-initdb.d/

# expose the 5432 port to outside the container
EXPOSE 5432

Вот проблемный раздел в файле standalone-ha.xml, в частности значение connection-url.

<subsystem xmlns="urn:jboss:domain:datasources:5.0">
        <datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true"
                        use-java-context="true">
            <connection-url>jdbc:postgresql://my-net/keycloak</connection-url>
            <driver>postgresql</driver>
            <pool>
                <max-pool-size>20</max-pool-size>
            </pool>
            <security>
                <user-name>keycloak</user-name>
                <password>sa</password>
            </security>
        </datasource>
        <drivers>
            <driver name="postgresql" module="org.postgresql">
                <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
            </driver>
        </drivers>
    </datasources>
</subsystem>

Postgres запускается нормально.Когда я запускаю Keycloak, я получаю java.net.UnknownHostException: my-net.Я также попытался localhost и получил ту же ошибку.

Наконец, я создал пользовательскую мостовую сеть в соответствии с руководством по Docker Networking

docker network create --driver bridge my-net

Я следовал руководству, но мне не удалось найти keycloak, чтобы найти базу данных postgresql.Насколько я понимаю, сеть my-net должна быть доступна внутри контейнера, работающего с keycloak.

Любая помощь будет принята с благодарностью.Спасибо

ОБНОВЛЕНИЕ

Postgres был запущен со следующим:

docker run --name postgresql -p 5432:5432 --network my-net postgresql

И Keycloak с:

docker run --name keycloak -p 8080:8180 --network my-net keycloak

1 Ответ

0 голосов
/ 23 декабря 2018

Моя рекомендация: не создавайте свой собственный образ Docker только для темы / модулей.Используйте официальный образ Keycloak и монтируйте ваши пользовательские файлы как том => вам будет проще обновлять образ.Официальный образ также предлагает переменные env конфигурации DB, поэтому вам не нужно использовать настраиваемый файл конфигурации:

docker run -d \
  --name keycloak \
  --net my-net \
  -p 8080:8080 \
  -p 443:8443 \
  -v $PWD/themes/mytheme:/opt/jboss/keycloak/themes/healthjoiner \
  -v $PWD/modules:/opt/jboss/keycloak/modules/system/layers/keycloak \
  -e DB_VENDOR=postgres \
  -e DB_ADDR=postgresql \
  -e DB_PORT=5432 \
  -e DB_DATABASE=<DB> \
  -e DB_USER=<DBUSER> \
  -e DB_PASSWORD=<DBPASSWORD> \
  jboss/keycloak:4.7.0.Final

См. Документ: https://hub.docker.com/r/jboss/keycloak

В любом случае URL-адрес подключения в вашем случаеis (используйте только имя контейнера):

jdbc:postgresql://keycloak:5432/<DATABASE>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...