当前位置: 首页 > 知识库问答 >
问题:

ORA-28547,带有docker容器中的php fpm

卢树
2023-03-14

我得到了一个可用的php fpm docker容器,作为nginx前端的php后端。我所说的工作,是指它按照预期在浏览器中呈现phpinfo输出。我的php fpm容器是由devilbox docker repo的php-fpm-7.4产品生产的。它已启用OCI8。

问题:在尝试oci_connect时,我一直收到ORA-28547

我所做的:

1——将/usr/lib/oracle/client64/lib添加到ld内的文件中。所以conf.d并运行ldconfig-v2——重新启动docker容器
3——现在phpinfo显示ORACLE\u HOME=/usr/lib/ORACLE/client64/lib

4--添加tnsnames。ora to/usr/lib/oracle/client6/lib/network/admin(该文件夹中有一个README.md文件,它甚至告诉您要这样做)5--再次重新启动docker容器。6-oci_连接仍然失败,并出现相同的错误。

我错过了什么?

非常感谢您的任何指点,我想我已经浏览到互联网的尽头,但没有找到解决方案。

--解决方案:重新安装instantClient,重新链接库(ldconfig)以使用新的instantClient库。创建修改后的dockerfile,以便在创建容器时执行此操作。

我修改了php fpm的Dockerfile文件,以添加新的即时客户端文件,而不是原始文件提供的html" target="_blank">文件。我无法与他们合作。我尝试过几次重建图像(docker compose-up--build),下面是实现此功能的文件:

来自devilbox/php fpm:7.4-work

#instantclient。配置内容:/opt/instantclient运行echo”/opt/instantclient

WORKDIR/opt

运行wgethttps://download.oracle.com/otn_software/linux/instantclient/19800/instantclient-sdk-linux.x64-19.8.0.0.0dbru.zip

运行wgethttps://download.oracle.com/otn_software/linux/instantclient/19800/instantclient-sqlplus-linux.x64-19.8.0.0.0dbru.zip

运行wgethttps://download.oracle.com/otn_software/linux/instantclient/19800/instantclient-basic-linux.x64-19.8.0.0.0dbru.zip

运行解压缩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。拉链

运行mvinstantclient_19_8instantClient

添加tnsnames。ora/opt/instantclient/network/admin

运行ldconfig-v

"php-fpm"

暴露9000

共有3个答案

微生善
2023-03-14

这就是为什么我建议使用tnsping——不幸的是,它没有包含在任何即时客户端文件中,这是一个遗憾——所以你必须从匹配操作系统、bitsize和Oracle版本的普通客户端获取它。作为解决方案,您可以将SQL*Plus包文件放入容器中,并尝试与foo用户连接,如

sqlplus foo/foo@\<ip>:\<port>/\<dbname>

这将生成一个错误-如果

  • 用户/密码不匹配-ORA-1017即。DB
钱志
2023-03-14

你能查一下吗

https://github.com/caffeinalab/php-fpm-oci8/blob/master/Dockerfile

这似乎创建了一个p-fpm-oci8 docker映像

的“wget”

wget-qO-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

当您将下载的即时客户端文件放入本地主机目录时,可以删除

/usr/本地

并将其提取出来,从而产生

/usr/local/InstantClient_12_2或18,19c等同物

必须调整4个“ln”命令以反映本地主机instantclient目录

instantClient的tnsnames.ora可以通过VOLUME命令从主机获得

-------------最终解决方案-----------(与网络无关,我对文件做了几处更改,同时还尝试了不同的数据库,因此我认为是不同的数据库解决了问题)

经过多次尝试和错误,我想出了一个Dockerfile,它可以创建正确的文件配置,并在没有任何问题的情况下连接到数据库:

--Dockerfile:(使用devilbox映像构建php fpm 7.4)

Final solution:

我修改了php fpm的Dockerfile文件,以添加新的即时客户端文件,而不是原始文件提供的文件。我无法与他们合作。我尝试过几次重建图像(docker compose-up--build),下面是实现此功能的文件:

来自devilbox/php fpm:7.4-work

添加instantclient.conf /etc/ld.so.conf.d/

WORKDIR/opt

运行wgethttps://download.oracle.com/otn_software/linux/instantclient/19800/instantclient-sdk-linux.x64-19.8.0.0.0dbru.zip

运行wgethttps://download.oracle.com/otn_software/linux/instantclient/19800/instantclient-sqlplus-linux.x64-19.8.0.0.0dbru.zip

运行wgethttps://download.oracle.com/otn_software/linux/instantclient/19800/instantclient-basic-linux.x64-19.8.0.0.0dbru.zip

运行解压缩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。拉链

运行mvinstantclient_19_8instantClient

添加tnsnames。ora/opt/instantclient/network/admin

运行ldconfig-v

"php-fpm"

暴露9000

张腾
2023-03-14
# 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 
 类似资料:
  • 问题内容: 我有一台安装了docker host的Linux服务器,内存为16GB。我想在其上部署Windows Server容器。可能吗?有人尝试过此解决方案吗? 问题答案: 更新2019 如pipe_tape_coder在评论中指出的: Microsoft 改进了容器的网络选项,现在 允许每个容器中具有改进名称空间的多个容器 。 理论上(2015年10月的原始答案): Linux主机上没有运行

  • TL;DR:我可以配置一个容器来访问本机VGA,覆盖主机视频输出吗? 我正在考虑处理我的低功耗XenServer(以前是ESXi)白箱来设置一个docker最小安装(例如CoreOS、RancherOs或类似的发行版)。是否可以给一个(可能不是特权)容器对视频输出的独占访问/通过,安装一个可以与所有其他容器一起运行的媒体中心解决方案(例如Kodi),将全屏视频输出到电视,“显然”带有硬件加速视频解

  • 如果我理解正确,Elastic Beanstalk会为您部署的每个应用程序创建一个EC2实例。然而,应用程序通常不会100%以CPU运行,但amazon会按使用的实例向您收费。因此,如果我使用Dockerfiles部署5个应用程序,AWS将每月收取5个EC2实例的使用费。 考虑到这一点,我不能简单地启动一个EC2,安装docker并在其中运行我的容器吗?这不是更划算吗?

  • 问题摘要:无法访问在主机网络的容器中运行的Spring引导Web应用程序。 我正在我的机器中运行两个容器。 - 由于apache ignite节点可以通过静态IP地址进行发现,因此在启动容器(1)时,我设置了选项host networking mode(-net=host 到目前为止一切都很好:我可以按预期在两个容器形成的集群中启动容器和缓存节点。现在的问题是:当我尝试访问容器2中的Spring

  • 我想我可以按照我另一篇文章的建议使用合订本 docker-撰写mariadb外部卷映射问题 但是我知道容器应该是无状态的。所以看来我的想法是错误的? 我不知道会发生什么样的灾难性故障,所以如果容器被封砖,我有可能会丢失所有数据吗?或者有没有办法使用外存恢复? 如何处理这种情况?我有一个管理迁移的模式表,所以不希望该表是新的,并从square 1开始 问题:我应该让云上的Mariadb容器写到它喜欢

  • 我认为这是因为容器没有JAVA_HOME变量集。我执行了和尝试命令,但它没有显示java可执行文件。此外,java和javac命令不起作用。 有人知道我做错了什么吗?如有任何帮助,不胜感激。提前感谢!