赞
踩
docker run -it --name=容器名 镜像名:latest /bin/sh 由镜像创建容器并进入(只有镜像无容器)
或
docker exec -it 容器名 /bin/sh 直接进入运行中的容器
apk add libaio, libnsl, unzip
需要对应服务器版本, 命令
select * from v$version;
各版本下载地址(32位): https://www.oracle.com/database/technologies/instant-client/linux-x86-32-downloads.html
各版本下载地址(64位): https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html
# 下载basic免安装zip包, 需要登录验证, 所以下载链接不能复用, 要在上面链接中找对应版本下载 # 弄个单独目录存 cd /usr/local mkdir oracle cd oracle # wget -c 支持断点续传 wget -c https://download.oracle.com/otn/linux/instantclient/11204/instantclient-basic-linux.x64-11.2.0.4.0.zip ?AuthParam=1644827926_6725c450378f19288cb3dc5d040b8a18 # unzip 解压 unzip instantclient-basic-linux.x64-11.2.0.4.0.zip?AuthParam\=1644827926_6725c450378f19288cb3dc5d040b8a18 # 整理下文件 mv ./instantclient_11_2/* ./ rmdir instantclient_11_2
unzip End-of-central-directory signature not found: 多半是下载的文件有问题, 重新下载就可以
# 通过查看 /etc/profile 可以看到会加载 /etc/profile.d/目录下的 .sh结尾的文件 # 弄个单独的环境变量配置文件 vi /etc/profile.d/oracle.sh export ORACLE_HOME=/usr/local/oracle export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 export LD_LIBRARY_PATH=$ORACLE_HOME export PATH=$ORACLE_HOME:$PATH # 测试下加上没有 source /etc/profile echo $PATH # 退出容器 exit
注: 这里会有很多奇怪的报错, 以下为作者碰到的
报错1. Error loading shared library /usr/local/oracle/lib/libclntsh.so: No such file or directory
(一开始是打算用软链接的, 但是没用, 直接复制就可以了, 不知道为什么)
mkdir /usr/local/oracle/lib cp /usr/local/oracle/libclntsh.so.11.1 /usr/local/oracle/lib/libclntsh.so
- 1
- 2
报错2.
Error loading shared library libnsl.so.1: No such file or directory (needed by /usr/local/oracle/lib/libclntsh.so
(libnsl.so.1 或 libnsl.so) 建对应软链接ln -s /usr/lib/libnsl.so.2.0.0 /usr/lib/libnsl.so.1 ln -s /usr/lib/libnsl.so.2.0.0 /usr/lib/libnsl.so
- 1
- 2
docker commit -a 'laowang' 容器名 镜像名:1.0.0
注: 最后会发现环境变量没有加载, 原因未知
绕路解决方法:
- 通过DockerFile直接运行容器的项目: 修改
Dockerfile
文件, 例:CMD source /etc/profile && gunicorn ....
- 通过DockerCompose启动的项目: 修改
docker-compose.yml
文件 例:command: /bin/sh -c "source /etc/profile && gunicorn ...."
python 直连测试代码
import cx_Oracle
conn = cx_Oracle.connect(“user/passwd@host/instance”)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。