docker安装oracle


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

解决方法:

  1. 切换到root用户 (密码helowin)

    su root
  2. 编辑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
  3. 创建软连接

    ln -s $ORACLE_HOME/bin/sqlplus /usr/bin
  4. 切换到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

img

看到两个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

文章作者: ghf
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 ghf !
评论