docker安装oracle
获取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
创建容器
docker run -d -p 1521:1521 --name oracle11 registry.cnhangzhou.aliyuncs.com/helowin/oracle_11g
启动容器
docker start oracle11
可能会报以下错
docker: Error response from daemon: OCI runtime create failed: container_linux.go:449;container init caused “write /proc/self/attr/keycreate: permission denied””: unknown.
原因:操作系统已启用SELinux,造成“/proc/self/attr/keycreate” 没有写入权限 使用命令:getenfor查看SELinux运行模式
root@localhost ~]# getenforce
#查询SELinux的运行模式
Enforcing
#当前的SELinux是强制模式
[root@localhost ~]# sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
解决办法:
1 永久方法 – 需要重启服务器
修改/etc/selinux/config文件中设置SELINUX=disabled ,然后重启服务器。
2 临时方法 – 设置系统参数
使用命令setenforce 0
附:
setenforce 1 //设置SELinux 成为enforcing模式
setenforce 0 //设置SELinux 成为permissive模式
修改配置
进入容器
docker exec -it oracle11 bash
软连接
sqlplus /nolog
可能会报 bash: sqlplus: command not found
解决方法:
切换到root用户 (密码helowin)
su root
编辑profile文件配置ORACLE环境变量
vi /etc/profile
文件最后添加以下内容
export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2 export ORACLE_SID=helowin export PATH=$ORACLE_HOME/bin:$PATH
创建软连接
ln -s $ORACLE_HOME/bin/sqlplus /usr/bin
切换到oracle 用户
su - oracle
登录sqlplus并修改sys、system用户密码
sqlplus /nolog
conn /as sysdba
alter user system identified by system;
alter user sys identified by sys;
# 添加用户
create user test identified by 123456;
# 赋权
grant connect,resource,dba to test;
有可能报:database not open
alter database open;
还可能报: ORA-01507: database not mounted
解决办法:
alter database mount;
alter database open;
成功修改数据库密码后执行
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
客户端登陆
容器内查看oracle 的 lsnrctl 服务
lsnrctl status
看到两个Service,任选其一,修改 tnsnames.ora的 service_name=helowinXDB
tns样例:
docker_oracle11 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.30.31)(PORT =1521))
)
(CONNECT_DATA =
(SERVICE_NAME = helowinXDB)
)
)
附
docker 启动容器报错
iptables failed: iptables –wait -t nat -A DOCKER -p tcp -d 0/0 –dport 3000 -j DNAT –to-destination 172.17.0.3:3000 ! -i docker0: iptables: No chain/target/match by that name.
解决方法
重启docker服务
sudo systemctl restart docker