我得到了一个正常工作的php停靠容器,充当nginx前端的php后端。我所说的工作是,它按照预期在浏览器中呈现phpinfo输出。我的php容器是由devilbox码头回购公司的php 7.4产品生产的.它启用了OCI8。
问题:在尝试oci_connect时,我一直得到ORA-28547。
我所做的:
1-将/usr/lib/oracle/client64 64/lib添加到ld.so.con.d中的一个文件中,并运行ldconfig -v 2--重新启动码头容器。
现在phpinfo显示oracle_HOME=/usr/lib/oracle/client64 64/lib
4--将tnsnames.ora添加到/usr/lib/oracle/client6 6/lib/ you /admin(该文件夹中有一个README.md文件,甚至告诉您这样做)5--重新启动码头容器。oci_connect仍然在相同的错误中失败。
我错过了什么?
非常感谢你的指点,我想我已经浏览了互联网的尽头,但还没有找到解决方案。
-解决方案:重新安装实例化客户端、relink库(ldconfig)以使用新的实例化客户端库。创建修改后的dockerfile,以便在创建容器时执行此操作。
我修改了php-fpm的Dockerfile文件,以添加新的即时客户端文件,而不是原始文件提供的文件。我没能和他们合作。我已经尝试过几次重建映像(停靠-组合-构建),这就是这个文件的作用所在:
来自devilbox/php-fpm:7.4-work
#instantclient.conf内容: /opt/instantclient运行echo "/opt/instantclient“>/etc/ld.so.con.d/insttclient.conf
WORKDIR /opt
运行解压缩instantclient-sdk-linux.x64-19.8.0.0.0dbru.zip
运行解压缩instantclient-sqlplus-linux.x64-19.8.0.0.0dbru.zip
运行解压缩instantclient-basic-linux.x64-19.8.0.0.0dbru.zip
运行mv instantclient_19_8实例化客户机
添加tnsnames.ora /opt/实例化客户机/网络/管理
运行ldconfig -v
CMD "php-fpm“
揭露9000
发布于 2020-10-17 18:10:32
你能检查一下吗
https://github.com/caffeinalab/php-fpm-oci8/blob/master/Dockerfile
,这似乎创建了一个p-fpm-oci8对接者图像。
"wget“
wget https://raw.githubusercontent.com/caffeinalab/php-fpm-oci8/master/oracle/instantclient-basic-linux.x64-12.2.0.1.0.zip区bsdtar -xvf- -C /usr/local &
wget https://raw.githubusercontent.com/caffeinalab/php-fpm-oci8/master/oracle/instantclient-sdk-linux.x64-12.2.0.1.0.zip区bsdtar -xvf- -C /usr/local &
wget https://raw.githubusercontent.com/caffeinalab/php-fpm-oci8/master/oracle/instantclient-sqlplus-linux.x64-12.2.0.1.0.zip \ bsdtar -xvf- -C /usr/local && \
可以在将下载的即时客户端文件放置到本地主机dir中时删除。
/usr/本地
然后把它们提取出来-
/usr/局部/实例化_12_2或18,19c等价物
必须调整4个"ln“命令以反映本地主机实例化dir。
实例化客户端的tnsnames.ora可以从主机按卷命令获得。
-最后一种解决办法
经过多次尝试和错误之后,我想出了一个Dockerfile,它创建了正确的文件配置,并在没有任何问题的情况下连接到数据库:
-Dockerfile:(使用devilbox映像构建php-fpm 7.4 )
Final solution:我修改了php-fpm的Dockerfile文件,以添加新的即时客户端文件,而不是原始文件提供的文件。我没能和他们合作。我已经尝试过几次重建映像(停靠-组合-构建),这就是这个文件的作用所在:
来自devilbox/php-fpm:7.4-work
添加instantclient.conf /etc/ld.so.con.d/
WORKDIR /opt
运行解压缩instantclient-sdk-linux.x64-19.8.0.0.0dbru.zip
运行解压缩instantclient-sqlplus-linux.x64-19.8.0.0.0dbru.zip
运行解压缩instantclient-basic-linux.x64-19.8.0.0.0dbru.zip
运行mv instantclient_19_8实例化客户机
添加tnsnames.ora /opt/实例化客户机/网络/管理
运行ldconfig -v
CMD "php-fpm“
揭露9000
发布于 2020-10-17 16:08:42
# Insert following to .bash_profile or .profile of the User starting the php-fpm
export ORACLE_HOME=/usr/lib/oracle/client64
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
export PATH=$PATH:$ORACLE_HOME/bin
export TNS_ADMIN=$ORACLE_HOME/network/admin
# Test to Ping Remote Db to be connected by PHP
tnsping <tns-name of remote DB - i.e. db12c.world>
# restart here the php Engine 发布于 2020-10-17 19:32:30
,我明白了!是防火墙问题。我启动了一个tcpdump捕获会话,php、oci8和实例化客户端库没有什么问题。已启动通信量,但数据库没有响应。我让它在一个不同的数据库上工作,在这个数据库中,这个盒子没有防火墙问题。
我现在将尝试重建码头形象,以便我可以看到我必须手动添加,如果有的话。
这是不正确的(防火墙是问题的根源)。重建码头文件告诉我哪里出了问题。请参阅原始问题的解决方案。
https://stackoverflow.com/questions/64403671
复制相似问题