docker安装oracle
Posted 胡八一
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker安装oracle相关的知识,希望对你有一定的参考价值。
拉取镜像
-
切换到root账号下,如果是普通账号,下面操作指令前面加sudo
-
搜索oracle镜像
docker search oracle
- 拉取镜像
docker pull oraclelinux
由于使用 官方镜像 下载速度非常慢,因此,我们可以使用阿里镜像
docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
- 使用
docker images
查看镜像,确认已经下载完成
docker images
启动容器
- 默认启动容器的方式
docker run -d -it -p 1521:1521 --name oracle11g --restart=always registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
- 持久化启动的方式
docker run -d -it -p 1521:1521 --name oracle --restart=always --mount source=oracle_vol,target=/home/oracle/app/oracle/oradata registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
参数说明:
-d
:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不 会自动登录容器,如果只加-i -t 两个参数,创建后就会自动进去容器)。
-i
:表示以“交互模式”运行容器
-t
:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即 分配一个伪终端。
-p 1521:1521
:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p 做多个端口映射。
--name oracle
:为创建的容器命名,即容器名称叫oracle。
--restart=always
:当 Docker 重启时,容器会自动启动。
--mount source=oracle_vol,target=/home/oracle/app/oracle/oradata
:默认情况下用来挂载volume
,但也可以用来创建bind mount
和tmpfs
。如果不指定type选项,则默认为挂载volume
,volume
是一种更为灵活的数据管理方式,volume
可以通过docker volume
命令集被管理。
--volume
(或简写为-v)只能创建bind mount
。示例:
docker run --name $CONTAINER_NAME -it \\
-v /localhost/app:/container/app:rw \\
-v /localhost/app:/container/app:ro \\
nginx:latest /bin/bash
注释:
- 命令格式:
[宿主机目录:]容器目录[:OPTIONS]]]
- 如果指定宿主机目录,则必须是绝对路径,如果路径不存在则会自动创建
- 实例中的
rw
为读写,ro
为只读
查看启动的线程
netstat -tulnp
查询运行的容器
docker ps
查看所有的容器
dockers ps -a
进入 oracle 容器内环境配置
进入容器
docker exec -it oracle bash
切换到 root
用户 su root
,密码为 helowin
docker容器配置环境变量不是在 /etc/profile
中,容器启动不会走这个文件。
可以将环境变量的配置设置在 /home/oracle/.bashrc
文件下,这样可以省略掉软连接的创建 ln -s $ORACLE_HOME/bin/sqlplus /usr/bin
编辑环境变量,在文件最后加入以下命令
vi /home/oracle/.bashrc
export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2
export ORACLE_SID=helowin
export PATH=$ORACLE_HOME/bin:$PATH
wq 保存并退出。然后使用 source /home/oracle/.bashrc
刷新环境变量,并使之生效
source /home/oracle/.bashrc
进入 oracle 命令行
使用 sqlplus /nolog
进入oracle命令行
sqlplus /nolog
使用 “操作系统认证” 的方式,登录oracle
conn / as sysdba
如果直接使用默认的 root
用户登录,会报登录失败。这里必须使用 su - oracle
命令,将当前用户切换到 oracle
,然后在执行登录命令。
查看oracle用户
su - oracle
sqlplus /nolog
conn / as sysdba
select instance_name from v$instance;
show user;
阿里的这个镜像,所有的密码都是统一的 helowin
,账号为system
system
用户具有DBA
权限,但是没有SYSDBA
权限。平常一般用该帐号管理数据库。
而sys
用户是Oracle
数据库中权限最高的帐号,具有“SYSDBA”和“SYSOPER”
权限,一般不允许从外部登录。
配置防火墙
防火墙要允许 1521
端口,外部的数据库管理工具才能连的上。
# 打开防火墙
systemctl start firewalld
# 查询端口状态
firewall-cmd --query-port=1521/tcp
# 永久性开放端口
firewall-cmd --permanent --zone=public --add-port=1521/tcp
# 重启防火墙
firewall-cmd --reload
firewall-cmd --query-port=1521/tcp
测试连接
密码为helowin
docker安装oracle库的坑
参考技术A docker运行oracle镜像报错,详情如下:docker run -d -p 19000:8080 -p 1521:1521 --name oracle12c --restart=always sath89/oracle-12c
1299367555e9ee4fe8db7afe2e42852605652b30598af1302e20dfef75a4193c
docker: Error response from daemon: Ports are not available: listen tcp 0.0.0.0:1521: bind: An attempt was made to access a socket in a way forbidden by its access permissions
从报错来看是因为端口被占用,于是乎查看端口占用情况
netstat -ano
没有发现端口占用
使用 Get-NetTCPConnection |findstr在powershell中也没发现此端口没占用
然后一通百度,原因是windows默认排除了这些端口范围,查看禁用端口的命令如下:
netsh interface ipv4 show excludedportrange protocol=tcp
所以快捷解决方式就是不使用以上范围内的端口。
根本的解决方法如下。原因是Docker for Windows and Hyper-V are responsible for all of those excluded port ranges above.
注:以下方法未亲测,百度到的添加端口的方法
1、先禁用hyper-v(生效需要重启)
dism.exe /Online /Disable-Feature:Microsoft-Hyper-V
2、然后添加要使用的端口
netsh int ipv4 add excludedportrange protocol=tcp startport=50051 numberofports=1
3、重新启用hyper-v
dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All
以上是关于docker安装oracle的主要内容,如果未能解决你的问题,请参考以下文章
修改 oracle 数据库的 sys 账号密码,alter user sys identified by Aa123456@#_# * ERROR at line 1: ORA-01034: ORAC