在开始解释这个问题之前,我要提到的所有代码也在我的存储库中公开可用。
我正在尝试通过禁用 m-TLS 并改用 TLS 来连接到没有钱包的自治数据库实例。我已正确配置它,因此我只能使用用户名、密码和 DSN 字符串进行连接。
如果我从我的 python 环境中执行这段代码,我可以成功地看到结果:
但是,当我在 Docker 容器中执行相同的代码时,由于某种原因它失败了。
说无法打开文件,我认为这很奇怪,因为我不应该引用任何避免相互 TLS 的文件作为自治数据库的身份验证机制。
Dockerfile如下:
# For more information, please refer to https://aka.ms/vscode-docker-python
FROM ghcr.io/oracle/oraclelinux8-instantclient:21
#RUN dnf -y install oracle-instantclient-release-el8 && \
# dnf -y install oracle-instantclient-basic oracle-instantclient-devel oracle-instantclient-sqlplus && \
# rm -rf /var/cache/dnf
RUN yum -y update && yum install -y python3 python3-pip
# Keeps Python from generating .pyc files in the container
ENV PYTHONDONTWRITEBYTECODE=1
# Turns off buffering for easier container logging
ENV PYTHONUNBUFFERED=1
# Install pip requirements
COPY requirements.txt .
RUN python3 -m pip install -r requirements.txt
WORKDIR /app
COPY . /app
# Wallet is no longer needed as we're using TLS to connect to ADB. See src/testing_db_tls.py for more info.
COPY wallet /home/appuser/wallets/Wallet_forza
# Creates a non-root user with an explicit UID and adds permission to access the /app folder
# For more info, please refer to https://aka.ms/vscode-docker-python-configure-containers
RUN useradd appuser && chown -R appuser /app
USER appuser
EXPOSE 65530/udp
# During debugging, this entry point will be overridden. For more information, please refer to https://aka.ms/vscode-docker-python-debug
ENTRYPOINT "python3" "src/oracledb.py"
请注意,这个 Dockerfile 也是正确的,使用钱包执行 Docker 容器内的连接代码,并且引用钱包位置的相应代码始终有效。
所以我的问题是,Docker 是否有阻碍通过 TLS 连接到我丢失的数据库或其他一些限制参数不允许我在 Docker 容器内正确连接的东西?执行的代码完全一样,在Docker镜像内外我都有Oracle的即时客户端。