Docker容器内通过PHP连接Hyperfile SQL数据库失败求助
Docker容器内连接Hyperfile SQL数据库(PHP)失败求助
问题概述
尝试在Docker容器内连接Hyperfile SQL数据库,最终要通过PHP实现连接,但目前isql命令和PHP代码均连接失败。
错误信息
isql命令执行错误
root@5b0aa50b8fd8:/tmp# isql -v hyperfile [I][unixODBC]I [ISQL]ERROR: Could not SQLConnect
PHP连接失败
$hf_hostname = "172.22.1.31"; $hf_port = "4900"; $hf_database = "noyau"; $hf_user = "****"; $hf_password = "****"; $hf_dsn = sprintf("odbc:DRIVER={HFSQL};Server Name=%s;Server Port=%s;Database=%s;UID=%s;PWD=%s;", $hf_hostname, $hf_port, $hf_database, $hf_user, $hf_password); $hf_dbh = new PDO($hf_dsn); => SQLSTATE[0] SQLDriverConnect: 0 I
配置文件详情
Dockerfile
# 使用Ubuntu基础镜像 FROM ubuntu:latest # 更新软件包并安装unixodbc相关工具 RUN apt-get update && apt-get install -y unixodbc unixodbc-dev odbcinst unzip libiodbc2-dev # 复制HFSQL驱动及ODBC配置文件到容器 COPY wxpackodbclinux64.zip /usr/local/lib/wxpackodbclinux64.zip RUN cd /usr/local/lib/ \ && unzip /usr/local/lib/wxpackodbclinux64.zip \ && chmod 777 -R ./ \ && ./install.sh COPY odbcinst.ini /etc/ COPY odbc.ini /etc/ ENV ODBCINI=/etc/odbc.ini ENV ODBCSYSINI=/etc # 配置ODBC驱动 RUN odbcinst -i -d -f /etc/odbcinst.ini RUN odbcinst -i -s -l -f /etc/odbc.ini RUN echo "/usr/local/lib" > /etc/ld.so.conf.d/hfsql.conf && ldconfig # 复制应用代码 COPY . /app WORKDIR /app CMD ["tail", "-f", "/dev/null"]
odbc.ini
[ODBC Data Sources] hyperfile = HFSQL [hyperfile] Description=HFSQL Driver=HFSQL Server Name=172.22.1.31 Server Port=4900 Database=noyau UID=admageo PWD=yu1209*
odbcinst.ini
[HFSQL] Description=HFSQL Driver Driver=/usr/local/lib/wd230hfo64.so
2024年2月27日更新
经@VonC提示,wd230hfo64.so与unixODBC不兼容,尝试改用iodbtest测试连接,仍无法正常运行:
指定登录信息测试
Starting program: /usr/bin/iodbctest Driver=\{HFSQL\}\;Server=172.22.1.31:4900\;Database=noyau\;User=****\;Password=***\*\; [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". iODBC Demonstration program This program shows an interactive SQL processor Driver Manager: 03.52.0812.0326 [New Thread 0x7ffff7d61640 (LWP 3120)] Thread 1 "iodbctest" received signal SIGSEGV, Segmentation fault. __wcslen_avx2 () at ../sysdeps/x86_64/multiarch/strlen-avx2.S:74 74 ../sysdeps/x86_64/multiarch/strlen-avx2.S: No such file or directory. (gdb) exit A debugging session is active. Inferior 1 [process 3117] will be killed.
使用DSN测试
Starting program: /usr/bin/iodbctest DSN=hyperfile [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". iODBC Demonstration program This program shows an interactive SQL processor Driver Manager: 03.52.0812.0326 [New Thread 0x7ffff7d61640 (LWP 3100)] [New Thread 0x7ffff7d50640 (LWP 3101)] [New Thread 0x7ffff7d3f640 (LWP 3102)] [Thread 0x7ffff7d50640 (LWP 3101) exited] [Thread 0x7ffff7d3f640 (LWP 3102) exited] 1: SQLDriverConnect = L'acc (0) SQLSTATE=0800 1: ODBC_Connect = L'acc (0) SQLSTATE=0800 [Thread 0x7ffff7d61640 (LWP 3100) exited] Have a nice day.[Inferior 1 (process 3097) exited normally]
寻求解决该问题的帮助或建议,感谢支持。
内容的提问来源于stack exchange,提问作者jeremy.raf
相关产品推荐
相关产品推荐

