搜索镜像
docker search oralce
拉取镜像
docker pull oracleinanutshell/oracle-xe-11g
(具体拉取哪个根据实际情况而定
启动镜像
docker run -p 1521:1521 -e ORACLE_ALLOW_REMOTE=true --name oracle_11g -d --restart=always oracleinanutshell/oracle-xe-11g
-d 后台运行 -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
上面命令中 -e ORACLE_ALLOW_REMOTE=true 的作用是开启远程连接,如果只是本地使用可以写成这样:
$ docker run -d -p 49161:1521 alexeiled/docker-oracle-xe-11g
docker run -d -v /data/kongchao/docker_volume/oracle_data:/data/oracle_data -p 49160
自动启动镜像 --restart=always
报错:
FATA[0000] Error response from daemon: could not find image: Multiple IDs found with provided prefix
找到多个带有提供的前缀的ID
docker images 发现明明是有这个镜像的,那就把原来的删了重新pull
docker rmi imageid或者docker image rm [image]
docker pull oracleinanutshell/oracle-xe-11g
这里发现意思是因为有多个不同id的相同名字的景象,所以根据景象的名字删除景象,而不是id
报错
FATA[0000] Error response from daemon: Conflict. The name “oracle_11g” is already in use by container 839d0476e934. You have to delete (or rename) that container to be able to reuse that name.
杀掉这个容器,然后重新启动
查看所有的容器
docker ps -a
终止容器
docker stop $CONTAINER_ID
可以使用"docker rm 容器id"来删除一个终止状态的容器;若要删除一个运行中的容器,需要加-f参数。
报错:
FATA[0000] Error response from daemon: Cannot start container 3ed0d0a282f945c9ecc8d80d137a9a4ed2d4a926b24aad86be870bd005dd5b7f: (exit status 1)
解决方案https://www.andrewklau.com/error-response-from-daemon-cannot-start-container-exit-status-1/
简而言之就是重启docker,文章中的方式是 service docker restart,我通过/etc/init.d/docker restart重启
重启之后报错:
FATA[0001] Error response from daemon: Cannot start container c8512409932643e1c480c12680d70a12dc1de4aa5127186e72469cc89e974677: Error starting userland proxy: listen tcp 0.0.0.0:1521: bind: address already in use
这个简单就是端口占用
设置用户信息
docker exec -it oracle_11g /bin/bash
切换到oracle用户,修改oracle的相关账号密码
su - oracle
sqlplus / as sysdba
alter user system identified by oracle;
alter user sys identified by oracle;
查看当前的用户
show user;
SQL> show user;
USER is "SYS"
因为sys只能只能以 sysdba Sysoper角色登录反正我用这个用户登录不了。所以切换用户
Conn system/oracle
查看当前的数据库实例
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_name string XE
desc all_tables;
如果刚才通过sys建表的话,是没有刚才建的表的,因为是属于不同的用户。
输入建表语句
create table student(
SID number(32) primary key,
SNAME varchar(32),
wage number(32)
)
create table person(
SID number(32) primary key,
SNAME varchar(32),
wage number(32)
)
查看是否创建成功
select table_name from all_tables where table_name like 'student';
连接