首页 > 解决方案 > wso2 apim/identity server docker中的Mysql连接错误

问题描述

我有 3 个用于 WSO2 apim、身份服务器和 mysql 的 dockerfile。使用 docker-compose 来运行这些。对应的 docker-compose.yml 如下:-

    # docker-compose version
version: "3.7"

# services/containers to be run
services:
  wso2am:
    build: ./apim
    image: wso2am:2.6.0
    ports:
      - "9443:9443"
    links:
      - mysql-db
      - wso2is-km
  wso2is-km:
    build: ./is-as-km
    image: wso2is-km:5.7.0
    ports:
      - "9444:9444"
    links:
      - mysql-db
  mysql-db:
    build: ./mysql
    image: mysql:5.7.26
    ports:
      - "3306:3306"
      - "33060:33060"

在不将 h2 数据库更改为 mysql 的情况下运行时,身份服务器/apim 分别在端口 9444/9443 上运行良好。同样在 mysql 中,docker 从 apim/identity 服务器中的 datascripts 文件夹创建了 regdb/apidb sql 数据库。

# Derived from official mysql image (our base image)
FROM mysql:5.7
MAINTAINER Abhilash K R <abhilash.kr@aot-technologies.com>

ENV MYSQL_ROOT_PASSWORD root
# Add a user
ENV MYSQL_USER wso2carbon
ENV MYSQL_PASSWORD wso2carbon

# Add the content of the sql-scripts/ directory to your image
# All scripts in docker-entrypoint-initdb.d/ are automatically
COPY sql-scripts/ /docker-entrypoint-initdb.d
# expose ports
EXPOSE 3306 33060

添加了 jdbc 驱动程序并添加了新的 db url,如下所示:

<datasource>
            <name>WSO2_CARBON_DB</name>
            <description>The datasource used for registry and user manager</description>
            <jndiConfig>
                <name>jdbc/WSO2CarbonDB</name>
            </jndiConfig>
            <definition type="RDBMS">
                <configuration>
                    <url>jdbc:mysql://localhost:3306/regdb</url>
                    <username>wso2carbon</username>
                    <password>wso2carbon</password>
                    <driverClassName>com.mysql.cj.jdbc.Driver</driverClassName>
                    <maxActive>50</maxActive>
                    <maxWait>60000</maxWait>
                    <testOnBorrow>true</testOnBorrow>
                    <validationQuery>SELECT 1</validationQuery>
                    <validationInterval>30000</validationInterval>
                    <defaultAutoCommit>true</defaultAutoCommit>
                </configuration>
            </definition>
        </datasource>

得到如下错误: 认为错误是在 url jdbc:mysql://localhost:3306/regdb ,试图给 dockerhost 的 localhost/ip 也仍然没有工作。在此处输入图像描述 在此处输入图像描述

标签: mysqldockerwso2wso2iswso2-am

解决方案


尝试如下更改mysql连接字符串-

<url>jdbc:mysql:jdbc:mysql://mysql-db:3306/regdb</url>

在 compose 中,服务可以通过其名称本身来访问。无需使用links等。您可以使用depends_onservice_healthy在您有相互依赖的服务的情况下使用。

参考 - https://docs.docker.com/compose/compose-file/compose-file-v2/#depends_on


推荐阅读