相同的docker镜像适用于Docker for Windows,但不适用于linux

时间:2017-07-19 11:33:35

标签: linux windows oracle docker

我想要实现的目标
我想通过sqlplus

连接到oracle容器中的oracle数据库

我的问题是什么
我可以连接到Docker for Windows中相同图像的数据库,但不能连接到Linux主机

我做了什么

c:\>docker pull wnameless/oracle-xe-11g
c:\>docker run -d -p 49160:22 -p 49161:1521 wnameless/oracle-xe-11g
c:\>docker exec -it f79f7aa5222c /bin/bash
root@f79f7aa5222c:/# sqlplus system/oracle

结果:

  

SQL * Plus:版本11.2.0.2.0于2017年7月19日星期三07:28:45生产

     

版权所有(c)1982,2011,Oracle。保留所有权利。

     

连接到:   Oracle Database 11g快捷版11.2.0.2.0版 - 64位生产

的Linux

[xx@yy Docker]$ sudo docker pull wnameless/oracle-xe-11g
[xx@yy Docker]$ sudo docker run --shm-size=2g -d -p 49160:22 -p 49161:1521 wnameless/oracle-xe-11g
[xx@yy Docker]$ sudo docker exec -it cea28583cb1c /bin/bash
root@cea28583cb1c:/# sqlplus system/oracle

结果:

  

SQL * Plus:版本11.2.0.2.0于2017年7月19日星期三07:34:16生产

     

版权所有(c)1982,2011,Oracle。保留所有权利。

     

ERROR:
  ORA-01034:ORACLE不可用
  ORA-27101:共享内存领域不存在
  Linux-x86_64错误:2:没有这样的文件或目录
  进程ID:0
  会话ID:0序列号:0

的相关信息 Linux系统:

码头信息

  

[xx @ yy Docker] $ sudo docker info
  容器:1
   跑步:1
   暂停:0
   停了:0
  图像:33
  服务器版本:1.13.1
  存储驱动程序:devicemapper
   游泳池名称:docker-8:17-4460587-pool
   Pool Blocksize:65.54 kB
   基本设备尺寸:10.74 GB
   支持文件系统:xfs
   数据文件:/ dev / loop0
   元数据文件:/ dev / loop1
   使用的数据空间:4.741 GB
   数据空间总计:107.4 GB
   可用数据空间:23.21 GB
   使用的元数据空间:4.289 MB
   元数据空间总计:2.147 GB
   可用元数据空间:2.143 GB
   薄池最小可用空间:10.74 GB
   支持Udev Sync:真实    延迟删除已启用:false
   延迟删除已启用:false
   延期删除设备数:0
   数据循环文件:/ var / lib / docker / devicemapper / devicemapper / data
   警告:强烈建议不要使用环回设备进行生产。使用--storage-opt dm.thinpooldev指定自定义块存储设备    元数据循环文件:/ var / lib / docker / devicemapper / devicemapper / metadata
   图书馆版本:1.02.137(2016-11-30)
  记录驱动程序:journald
  Cgroup驱动程序:systemd
  插件:
   卷:本地
   网络:桥接主机macvlan null overlay
   授权:rhel-push-plugin
  Swarm:不活动的   运行时:oci runc
  默认运行时:oci
  Init Binary:/ usr / libexec / docker / docker-init-current
  containerd版本:(预期:aa8187dbd3b7ad67d8e5e3a15115d3eef43a7ed1)
  runc版本:N / A(预计:9df8b306d01f59d3a8029be411de015b7304dd8f)
  初始版本:N / A(预计:949e6facb77383876aeff8a6944dde66b3089574)
  安全选项:
   
的Seccomp     警告:您未使用默认的seccomp配置文件
    档案:/etc/docker/seccomp.json
   SELinux的
  内核版本:4.11.9-300.fc26.x86_64
  操作系统:Fedora 26(工作站版)
  OSType:linux
  架构:x86_64
  Docker Hooks数量:3
  CPU:8
  总记忆:7.776 GiB
  姓名:yy.domain.de
  ID:4YVE:4FQ7:27SF:5JZJ:H6RA:P4H5:TK6O:FAGY:CKHS:RQGQ:3BDS:L7W7
  Docker Root目录:/ var / lib / docker
  调试模式(客户端):false
  调试模式(服务器):false
  登记处:https://registry.fedoraproject.org/v1/
  实验:假   不安全的注册管理机构:
   127.0.0.0/8
  实时恢复已启用:false
  注册管理机构:registry.fedoraproject.org(安全),registry.access.redhat.com(安全),docker.io(安全)

Docker日志

  

[xx @ yy Docker] $ sudo docker logs cea28583cb1c
  启动Oracle Net Listener。
  启动Oracle Database 11g Express Edition实例   /usr/sbin/startup.sh:忽略/docker-entrypoint-initdb.d/*

DF

  

root @ cea28583cb1c:/#df -h
  使用的文件系统大小可用使用%安装在   / dev / mapper / docker-8:17-4460587-f479be876efbf45834ea013ac119d63629944a2b315c7cbe7da3a22c1b1e566e 10G 1.9G 8.2G 19%/
  tmpfs 3.9G 0 3.9G 0%/ dev
  tmpfs 3.9G 0 3.9G 0%/ sys / fs / cgroup
  / dev / sdb1 110G 89G 17G 85%/ etc / hosts
  shm 2.0G 0 2.0G 0%/ dev / shm
  tmpfs 3.9G 0 3.9G 0%/ sys / firmware

STAT

  

root @ cea28583cb1c:/ #stat/
    档案:' /'
    大小:253块:0 IO块:4096目录
  设备:fd01h / 64769d Inode:131链接:22
  访问:(0755 / drwxr-xr-x)Uid:(0 / root)Gid:(0 / root)
  访问时间:2017-07-11 07:12:36.676904944 +0000
  修改:2017-07-19 07:33:44.026249772 +0000
  更改:2017-07-19 07:33:44.216248030 +0000
   出生: -

lsnrctrl

  

xx @ yy:/ etc / selinux #lsnrctl status

     

适用于Linux的LSNRCTL:版本11.2.0.2.0 - 2017年7月19日生产11:30:37

     

版权所有(c)1991,2011,Oracle。版权所有。

     

连接到(DESCRIPTION =(ADDRESS =(PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE)))   LISTENER的状态
  Alias LISTENER
  适用于Linux的TNSLSNR版本:版本11.2.0.2.0 - 生产
  开课日期19-JUL-2017 07:33:46
  正常运行时间0天3小时。 56分钟51秒
  跟踪级别关闭   安全开启:本地OS验证
  SNMP OFF
  默认服务XE
  监听器参数文件/u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora
  监听器日志文件/u01/app/oracle/diag/tnslsnr/cea28583cb1c/listener/alert/log.xml
  听力端点摘要...
    (DESCRIPTION =(ADDRESS =(PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE)))
    (DESCRIPTION =(ADDRESS =(PROTOCOL = TCP)(HOST = cea28583cb1c)(PORT = 1521)))
  服务摘要...
  服务" PLSExtProc"有1个实例。
    实例" PLSExtProc",状态UNKNOWN,有1个此服务的处理程序...
  命令成功完成

我已尝试过的内容

我尝试了两个用户,oracle和root 我将/ u01 / app / oracle的权限更改为755
我检查了selinux,这似乎没有激活/安装。至少那个docker信息告诉我什么,我找不到sestatus命令和/ etc / selinux只包含semanage.conf。
我尝试了几个不同的oracle图像,每个容器都有相同的结果。

修改 根据要求,我尝试自己启动oracle服务:

service oracle-xe start

alert_XE.log的结果:

  

启动ORACLE实例(正常)
  LICENSE_MAX_SESSION = 0
  LICENSE_SESSIONS_WARNING = 0
  采摘无闩锁SCN方案3
  使用LOG_ARCHIVE_DEST_1参数默认值为USE_DB_RECOVERY_FILE_DEST
  已启用撤消保留的自动调整功能   IMODE = BR
  ILAT = 19
  LICENSE_MAX_USERS = 0
  SYS审核已禁用
  启动:
  Oracle Database 11g快捷版11.2.0.2.0版 - 64位生产   使用服务器端spfile中的参数设置/u01/app/oracle/product/11.2.0/xe/dbs/spfileXE.ora
  具有非默认值的系统参数:
    会话= 176
    sga_target = 576M
    control_files =" /u01/app/oracle/oradata/XE/control.dbf"
    compatible =" 11.2.0.0.0"
    db_recovery_file_dest =" / u01 / app / oracle / fast_recovery_area"
    db_recovery_file_dest_size = 10G
    undo_management =" AUTO"
    undo_tablespace =" UNDOTBS1"
    remote_login_passwordfile =" EXCLUSIVE"
    调度员="(PROTOCOL = TCP)(SERVICE = XEXDB)"
    shared_servers = 4
    job_queue_processes = 4
    audit_file_dest =" / u01 / app / oracle / admin / XE / adump"
    db_name =" XE"
    open_cursors = 300
    pga_aggregate_target = 195840K
    diagnostic_dest =" / u01 / app / oracle"

2 个答案:

答案 0 :(得分:0)

最后解决了这个难题。

原来SELinux很活跃。几周前我不知道自己错过了什么。我肯定检查过,但也许我在容器内,而不是主机。 所以我使用--privileged标志运行容器,突然我可以连接到db。

感谢您的评论,抱歉我在这里发布了,你是对的@jww。我将确保将来只在这里发布编程问题。对不起。

答案 1 :(得分:0)

您还可以编辑/etc/sysconfig/docker并从通常默认添加的选项中删除--selinux-enabled。然后重新启动docker服务:

sudo systemctl restart docker

sudo service docker restart