一、安装oracle12c具体步骤:

1、docker拉取oracle数据库镜像
docker search oracle

查看可以使用docker拉取的oracle镜像;我是选择的Oracle12c这一款,truevoly/oracle-12c是复制之前的sath89/oracle-12c image镜像。

创建容器时没创建端口怎么办 12c创建为容器数据库_SQL

2、docker下载oracle镜像
docker pull truevoly/oracle-12c
docker images

创建容器时没创建端口怎么办 12c创建为容器数据库_docker_02

3、创建数据库挂载文件

将docker中的数据库文件同步到你的主机目录下,防止容器删除后数据库丢失。

[root@localhost ~]# mkdir -p /var/local/ora_data
[root@localhost ~]# chmod -R 777 /var/local/ora_data/
4、创建Oracle容器
[root@localhost ~]# docker run -d -p 2122:22 -p 9090:8080 -p 1521:1521 -v /var/local/ora_data:/u01/app/oracle/ --name oracle12c truevoly/oracle-12c

参数 -d 后台运行容器,并返回容器ID ; -p 指定端口 , -v 指定数据卷位置
数据卷的特点:
1、可以供多个容器访问,直接共享或者重用
2、独立于容器周期,不会在删除容器时删除其挂载的数据卷
3、数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含的数据这些数据会复制到新的容器中
4、可以直接对数据卷里的内容进行修改

创建成功后会返回一大串字符串:

ee92e88fea086c05af307d0274e1555ab04bfe747bb7b5b5e2198074bc40cdde
5、查看启动日志
[root@localhost ~]# docker logs -f ee92e88fea086c05af307d0274e1555ab04bfe747bb7b5b5e2198074bc40cdde
Database not initialized. Initializing database.
Starting tnslsnr
Copying database files
1% complete
3% complete
11% complete
18% complete
26% complete
37% complete
Creating and starting Oracle instance
40% complete
45% complete
50% complete
55% complete
56% complete
60% complete
62% complete
Completing Database Creation
66% complete
70% complete
73% complete
85% complete
96% complete
100% complete
Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/xe/xe.log" for further details.
Configuring Apex console
Database initialized. Please visit http://#containeer:8080/em http://#containeer:8080/apex for extra configuration if needed
Starting web management console

PL/SQL procedure successfully completed.

Starting import from '/docker-entrypoint-initdb.d':
ls: cannot access /docker-entrypoint-initdb.d/*: No such file or directory
Import finished

Database ready to use. Enjoy! ;)

看到这里,就说明已经启动成功了,ctrl+c退出即可

6、进入容器修改账号密码设置
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE                 COMMAND             CREATED         STATUS         PORTS                                                                                                                         NAMES
ee92e88fea08   truevoly/oracle-12c   "/entrypoint.sh "   6 minutes ago   Up 6 minutes   0.0.0.0:1521->1521/tcp, :::1521->1521/tcp, 0.0.0.0:2122->22/tcp, :::2122->22/tcp, 0.0.0.0:9090->8080/tcp, :::9090->8080/tcp   oracle12c
//进入容器内部
[root@localhost ~]# docker exec -it ee92e88fea08 /bin/bash
//切换成oracle用户
root@ee92e88fea08:/# su oracle
//进入sqlplus
oracle@ee92e88fea08:/$ $ORACLE_HOME/bin/sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Sun Aug 1 03:15:37 2021

Copyright (c) 1982, 2014, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Standard Edition Release 12.1.0.2.0 - 64bit Production
//设置密码有效期为无限制
SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

Profile altered.
//解锁system用户
SQL> alter user SYSTEM account unlock;

User altered.
//创建一个账号为test_lx的用户密码设置为test_lx
SQL> create user test_lx identified by test_lx;     

User created.
//为这个用户赋予管理员的权限
SQL> grant dba to test_lx;

Grant succeeded.

SQL> read escape sequence

//ctrl + p + q 退出容器(注意,不要exit退出,防止容器直接关闭了)

OK,现在Oracle数据库已经启动完毕!

hostname:docker所在宿主机的ip
port:1521
username1:system
password:oracle
username2:test_lx
password:test_lx
sid:xe
7、使用Pl/SQL测试连接

创建容器时没创建端口怎么办 12c创建为容器数据库_linux_03

最近也是初学docker,之前装了使用docker安装了一个oracle11g,这次拿oracle12c来练练手希望能够帮助大家~~

只要学不死,就往死里学!

二、安装oracle12c的过程中遇到的错误:

创建容器时没创建端口怎么办 12c创建为容器数据库_创建容器时没创建端口怎么办_04

这个错误意思是说找不到这个参数文件,然后我找到这个路径

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MPUtOlvS-1627792084

创建容器时没创建端口怎么办 12c创建为容器数据库_docker_05

发现里面确实没有initxe.ora这个文件,然后我复制到这个路径下面改个名称就可以了

创建容器时没创建端口怎么办 12c创建为容器数据库_创建容器时没创建端口怎么办_06

查看数据库日志所在路径:
show parameter dump_dest

创建容器时没创建端口怎么办 12c创建为容器数据库_SQL_07

可以看到oracle可以启动到nomount状态,但是启动不到mount状态。根据上边的提示可以确定启动到mount状态的时候,控制文件出错了。这样多是参数文件里的控制文件路径出现了错误。

显示控制文件路径:
show parameter control_files

创建容器时没创建端口怎么办 12c创建为容器数据库_oracle_08

然后查看参数文件控制文件的路径:发现和控制文件路径不同。然后同步一下参数文件路径就可以了;

上面错误中能够看到实例启动的过程中是先去读取参数文件,若是参数文件中控制文件的路径出现问题会致使没法启动到mount状态