相同的docker图像适用于Windows的Docker,但不适用于Linux上的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生产周三7月19日07:28:45 2017

Copyright(c)1982,2011,Oracle。 版权所有。

连接到:Oracle数据库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生产周三7月19日07:34:16 2017

Copyright(c)1982,2011,Oracle。 版权所有。

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

信息 Linux系统:

docker信息

[xx @ yy Docker] $ sudo docker信息
容器:1
运行:1
暂停:0
停止:0
图片:33
服务器版本:1.13.1
存储驱动程序:devicemapper
游泳池名称:docker-8:17-4460587池
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同步:true
推迟删除已启用:false
延迟删除启用:false
推迟删除的设备数量:0
数据循环文件:/ var / lib / docker / devicemapper / devicemapper / data
警告:强烈build议在生产中使用回送设备。 使用--storage-opt dm.thinpooldev指定一个自定义块存储设备。
元数据循环文件:/ var / lib / docker / devicemapper / devicemapper / metadata
库版本:1.02.137(2016-11-30)
logging驱动程序:journald
Cgroup驱动程序:systemd
插件:
卷:本地
networking:桥主机macvlan空覆盖
授权:rhel-push-plugin
群:不活跃
运行时:oci runc
默认运行时间:oci
Init Binary:/ usr / libexec / docker / docker-init-current
容器版本:(预计:aa8187dbd3b7ad67d8e5e3a15115d3eef43a7ed1)
runc版本:N / A(预计:9df8b306d01f59d3a8029be411de015b7304dd8f)
init版本:N / A(预计:949e6facb77383876aeff8a6944dde66b3089574)
安全选项:
的Seccomp
警告:您没有使用默认的seccompconfiguration文件
档案:/etc/docker/seccomp.json
SELinux的
内核版本:4.11.9-300.fc26.x86_64
操作系统:Fedora 26(Workstation Edition)
OSType:linux
架构:x86_64
docker钩的数量:3
CPU:8
总内存:7.776 GiB
名称:yy.domain.de
ID:4YVE:4FQ7:27SF:5JZJ:H6RA:P4H5:TK6O:FAGY:CKHS:RQGQ:3BDS:L7W7
Docker根目录:/ var / lib / docker
debugging模式(客户端):false
debugging模式(服务器):false
registry: https : //registry.fedoraproject.org/v1/
实验:假
不安全的注册局:
127.0.0.0/8
Live Restore Enabled:false
注册局:registry.fedoraproject.org(安全),registry.access.redhat.com(安全),docker.io(安全)

Docker日志

[xx @ yy Docker] $ sudo docker日志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

统计

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年,甲骨文。 版权所有。

连接到(DESCRIPTION =(ADDRESS =(PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE)))
LISTENER的状态
别名LISTENER
版本TNSLSNR for Linux:版本11.2.0.2.0 – 生产
开始date19-JUL-2017 07:33:46
正常运行时间0天3小时 56分钟 51秒
跟踪级别closures
安全开启:本地操作系统authentication
SNMPclosures
默认服务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个处理程序(S)为此服务…
命令成功完成

我已经试过了

我尝试了两个用户,oracle和root。
我将/ u01 / app / oracle的权限更改为755
我检查了selinux,这似乎不是主动/安装。 至less多数民众赞成泊坞信息告诉,我无法findsestatus命令和/ etc / selinux只包含semanage.conf。
我尝试了几个不同的oracle镜像,每个容器都有相同的结果。

编辑按要求,我尝试着自己启动oracle服务:

 service oracle-xe start 

alert_XE.log的结果:

启动ORACLE实例(正常)
LICENSE_MAX_SESSION = 0
LICENSE_SESSIONS_WARNING = 0
采用无锁SCNscheme3
使用LOG_ARCHIVE_DEST_1参数默认值作为USE_DB_RECOVERY_FILE_DEST
撤消保留的自动调整已打开。
IMODE = BR
ILAT = 19
LICENSE_MAX_USERS = 0
SYS审计被禁用
启动:
Oracle数据库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”
dispatchers =“(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”

终于解决了这个难题。

原来,SELinux是活跃的。 我不知道我几周前错过了什么。 我绝对检查过,但也许我是在容器内,而不是主机。 所以我用–privileged标志运行容器,突然间我可以连接到数据库。

感谢您的意见和对不起,我发布在这里,你是对的@jww。 我将确保在将来只在这里发布编程问题。 对不起。