python - docker容器中的python代码如何访问外部oracle数据库?
问题描述
我能够连接/ ping 到我的 Windows 主机上的外部数据库。此外,我可以从我的 docker Quickstart 终端 ping 同一个网络。
外部数据库可能位于公司防火墙后面的另一台服务器上。
但是,当我尝试运行具有连接到 Oracle 数据库的 python 文件的容器时,我收到此错误:
ORA-12170: TNS: 发生连接超时
但是,我可以在没有容器的情况下独立运行 python 文件。
看起来,容器配置在另一个网络上,可能无法访问 oracle 数据库。
我试过使用
docker run -it -net=host image_name
但这并不能解决问题。
这是我的码头文件-
# INSTALL PYTHON IMAGE
FROM python:3.7.2-slim
RUN apt-get update \
&& apt-get -y install unzip \
&& apt-get -y install libaio-dev \
&& apt-get install -y iputils-ping \
&& apt-get -y install sudo \
&& mkdir -p /opt/data/app
ADD ./oracle-instantclient/ /opt/data
ADD ./requirements.txt /opt/data
ADD ./app/ /opt/data/app
WORKDIR /opt/data
ENV ORACLE_HOME=/opt/data/oracle-instantclient/instantclient-basic-linux.x64-12.1.0.2.0/instantclient_12_1
ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME
ENV OCI_HOME=/opt/data/oracle-instantclient/instantclient-basic-linux.x64-12.1.0.2.0/instantclient_12_1
ENV OCI_LIB_DIR=/opt/data/oracle-instantclient/instantclient-basic-linux.x64-12.1.0.2.0/instantclient_12_1
ENV OCI_INCLUDE_DIR=/opt/data/oracle-instantclient/instantclient-basic-linux.x64-12.1.0.2.0/instantclient_12_1
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["python","./app/Oracle_ETL.py"]
这是我的python文件的摘录:
import cx_Oracle
import pandas as pd
db = cx_Oracle.connect('Username/Password@host:port/db_name')
select_sql = 'Select * from temp_table'
df_temp = pd.read_sql(select_sql, con=db)
.
.
.
我想知道我们如何从容器内部运行这个 python 文件。
解决方案
根据 Docker 文档,使用主机网络的选项是--network="host"。看看能不能解决你的问题。
推荐阅读
- c# - 在 WPF/Wix 中配置多个环境
- python - 条件多元 KDE 有多个最大值和最小值
- powershell - PowerShell 错误记录的“InvocationInfo”为空/不正确
- json - 如何将文本节点转换为对象节点以添加子节点
- java - 使用 Logger.getGlobal() 与 tomcat9 和 org.apache.logging.log4j.jul.LogManager - log4j 配置被忽略
- c++ - 代码块中的 CPP graphics.h
- python - 如何使用 Python 的 smpplib 同时向多个号码发送短信
- ms-access - 在 Access 中插入“日”列
- date - 在雪花中,如何将一种日期格式转换为另一种格式。从 YYYYMMDD 到 YYYY-MON-DD
- c++ - 如何使用 CMake 无缝构建?