简体   繁体   English

相同的Docker映像在Windows的Docker中有效,但在Linux的Docker中无效

[英]Same docker image works in Docker for Windows but not in docker on linux

What I want to achieve 我想实现的目标
I want to connect to an oracle database within an oracle container via sqlplus 我想通过sqlplus连接到oracle容器内的oracle数据库

What my problem is 我的问题是
I can connect to the database of the same image within Docker for Windows but not on a linux host 我可以在Docker for Windows中连接到同一映像的数据库,但不能在Linux主机上连接

What I did 我做了什么

Windows 视窗

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

Result: 结果:

SQL*Plus: Release 11.2.0.2.0 Production on Wed Jul 19 07:28:45 2017 SQL * Plus:版本11.2.0.2.0,2017年7月19日星期三生产

Copyright (c) 1982, 2011, Oracle. 版权所有(c)1982、2011,Oracle。 All rights reserved. 版权所有。

Connected to: Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production 已连接到:Oracle Database 11g Express Edition 11.2.0.2.0版-64位生产

Linux 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

Result: 结果:

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

Copyright (c) 1982, 2011, Oracle. 版权所有(c)1982、2011,Oracle。 All rights reserved. 版权所有。

ERROR: 错误:
ORA-01034: ORACLE not available ORA-01034:ORACLE不可用
ORA-27101: shared memory realm does not exist ORA-27101:共享内存领域不存在
Linux-x86_64 Error: 2: No such file or directory Linux-x86_64错误:2:没有这样的文件或目录
Process ID: 0 进程ID:0
Session ID: 0 Serial number: 0 会话ID:0序列号:0

Infos Linux system: 信息 Linux系统:

docker info 码头工人信息

[xx@yy Docker]$ sudo docker info [xx @ yy Docker] $ sudo docker信息
Containers: 1 货柜:1
Running: 1 跑步:1
Paused: 0 已暂停:0
Stopped: 0 已停止:0
Images: 33 图片:33
Server Version: 1.13.1 伺服器版本:1.13.1
Storage Driver: devicemapper 存储驱动程序:devicemapper
Pool Name: docker-8:17-4460587-pool 池名称:docker-8:17-4460587-pool
Pool Blocksize: 65.54 kB 池块大小:65.54 kB
Base Device Size: 10.74 GB 基本装置大小:10.74 GB
Backing Filesystem: xfs 支持文件系统:xfs
Data file: /dev/loop0 数据文件:/ dev / loop0
Metadata file: /dev/loop1 元数据文件:/ dev / loop1
Data Space Used: 4.741 GB 使用的数据空间:4.741 GB
Data Space Total: 107.4 GB 数据空间总计:107.4 GB
Data Space Available: 23.21 GB 可用数据空间:23.21 GB
Metadata Space Used: 4.289 MB 使用的元数据空间:4.289 MB
Metadata Space Total: 2.147 GB 元数据空间总计:2.147 GB
Metadata Space Available: 2.143 GB 可用的元数据空间:2.143 GB
Thin Pool Minimum Free Space: 10.74 GB 精简池最小可用空间:10.74 GB
Udev Sync Supported: true 支持的Udev Sync:true
Deferred Removal Enabled: false 启用延迟移除:false
Deferred Deletion Enabled: false 启用延迟删除:false
Deferred Deleted Device Count: 0 延迟的已删除设备计数:0
Data loop file: /var/lib/docker/devicemapper/devicemapper/data 数据循环文件:/ var / lib / docker / devicemapper / devicemapper / data
WARNING: Usage of loopback devices is strongly discouraged for production use. 警告:强烈建议不要将环回设备用于生产。 Use --storage-opt dm.thinpooldev to specify a custom block storage device. 使用--storage-opt dm.thinpooldev指定自定义块存储设备。
Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata 元数据循环文件:/ var / lib / docker / devicemapper / devicemapper / metadata
Library Version: 1.02.137 (2016-11-30) 图书馆版本:1.02.137(2016-11-30)
Logging Driver: journald 日志记录驱动程序:已记录日志
Cgroup Driver: systemd Cgroup驱动程序:systemd
Plugins: 插件:
Volume: local 数量:本地
Network: bridge host macvlan null overlay 网络:网桥主机macvlan空覆盖
Authorization: rhel-push-plugin 授权:rhel-push-plugin
Swarm: inactive 群:无效
Runtimes: oci runc 运行时:oci runc
Default Runtime: oci 默认运行时:oci
Init Binary: /usr/libexec/docker/docker-init-current 初始化二进制文件:/ usr / libexec / docker / docker-init-current
containerd version: (expected: aa8187dbd3b7ad67d8e5e3a15115d3eef43a7ed1) 容器版本:(预期:aa8187dbd3b7ad67d8e5e3a15115d3eef43a7ed1)
runc version: N/A (expected: 9df8b306d01f59d3a8029be411de015b7304dd8f) runc版本:不适用(预期:9df8b306d01f59d3a8029be411de015b7304dd8f)
init version: N/A (expected: 949e6facb77383876aeff8a6944dde66b3089574) 初始版本:不适用(预期:949e6facb77383876aeff8a6944dde66b3089574)
Security Options: 安全选项:
seccomp 的Seccomp
WARNING: You're not using the default seccomp profile 警告:您没有使用默认的seccomp配置文件
Profile: /etc/docker/seccomp.json 设定档:/etc/docker/seccomp.json
selinux SELinux的
Kernel Version: 4.11.9-300.fc26.x86_64 内核版本:4.11.9-300.fc26.x86_64
Operating System: Fedora 26 (Workstation Edition) 操作系统:Fedora 26(工作站版)
OSType: linux OSType:Linux
Architecture: x86_64 架构:x86_64
Number of Docker Hooks: 3 Docker挂钩数量:3
CPUs: 8 处理器:8
Total Memory: 7.776 GiB 总内存:7.776 GiB
Name: yy.domain.de 名称:yy.domain.de
ID: 4YVE:4FQ7:27SF:5JZJ:H6RA:P4H5:TK6O:FAGY:CKHS:RQGQ:3BDS:L7W7 ID:4YVE:4FQ7:27SF:5JZJ:H6RA:P4H5:TK6O:FAGY:CKHS:RQGQ:3BDS:L7W7
Docker Root Dir: /var/lib/docker Docker根目录:/ var / lib / docker
Debug Mode (client): false 调试模式(客户端):false
Debug Mode (server): false 调试模式(服务器):false
Registry: https://registry.fedoraproject.org/v1/ 注册表: https//registry.fedoraproject.org/v1/
Experimental: false 实验性:错误
Insecure Registries: 不安全的注册表:
127.0.0.0/8 127.0.0.0/8
Live Restore Enabled: false 启用实时还原:false
Registries: registry.fedoraproject.org (secure), registry.access.redhat.com (secure), docker.io (secure) 注册表:registry.fedoraproject.org(安全),registry.access.redhat.com(安全),docker.io(安全)

Docker logs Docker日志

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

df DF

root@cea28583cb1c:/# df -h root @ cea28583cb1c:/#df -h
Filesystem Size Used Avail Use% Mounted on 已使用的文件系统大小可用百分比已安装在
/dev/mapper/docker-8:17-4460587-f479be876efbf45834ea013ac119d63629944a2b315c7cbe7da3a22c1b1e566e 10G 1.9G 8.2G 19% / / 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%/ dev
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup tmpfs 3.9G 0 3.9G 0%/ sys / fs / cgroup
/dev/sdb1 110G 89G 17G 85% /etc/hosts / dev / sdb1 110G 89G 17G 85%/ etc / hosts
shm 2.0G 0 2.0G 0% /dev/shm shm 2.0G 0 2.0G 0%/ dev / shm
tmpfs 3.9G 0 3.9G 0% /sys/firmware tmpfs 3.9G 0 3.9G 0%/ sys /固件

stat 统计

root@cea28583cb1c:/# stat / root @ cea28583cb1c:/#stat /
File: '/' 文件:“ /”
Size: 253 Blocks: 0 IO Block: 4096 directory 大小:253块:0 IO块:4096目录
Device: fd01h/64769d Inode: 131 Links: 22 设备:fd01h / 64769d索引节点:131链接:22
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) 访问:(0755 / drwxr-xr-x)Uid:(0 / root)Gid:(0 / root)
Access: 2017-07-11 07:12:36.676904944 +0000 访问时间:2017-07-11 07:12:36.676904944 +0000
Modify: 2017-07-19 07:33:44.026249772 +0000 修改:2017-07-19 07:33:44.026249772 +0000
Change: 2017-07-19 07:33:44.216248030 +0000 变更:2017-07-19 07:33:44.216248030 +0000
Birth: - 出生时间:-

lsnrctrl lsnrctrl

xx@yy:/etc/selinux# lsnrctl status xx @ yy:/ etc / selinux#lsnrctl状态

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

Copyright (c) 1991, 2011, Oracle. 版权所有(c)1991、2011,Oracle。 All rights reserved. 版权所有。

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_XE))) 连接到(DESCRIPTION =(ADDRESS =(PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE)))
STATUS of the LISTENER 聆听者的状态
Alias LISTENER 别名李斯特
Version TNSLSNR for Linux: Version 11.2.0.2.0 - Production 适用于Linux的TNSLSNR版本:11.2.0.2.0版-生产
Start Date 19-JUL-2017 07:33:46 开始日期19-JUL-2017 07:33:46
Uptime 0 days 3 hr. 正常运行时间0天3小时。 56 min. 56分钟 51 sec 51秒
Trace Level off 跟踪电平关闭
Security ON: Local OS Authentication 安全性:本地操作系统身份验证
SNMP OFF SNMP关闭
Default Service XE 默认服务XE
Listener Parameter File /u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora 侦听器参数文件/u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/cea28583cb1c/listener/alert/log.xml 侦听器日志文件/u01/app/oracle/diag/tnslsnr/cea28583cb1c/listener/alert/log.xml
Listening Endpoints Summary... 侦听端点摘要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC_FOR_XE))) (DESCRIPTION =(ADDRESS =(PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=cea28583cb1c)(PORT=1521))) (DESCRIPTION =(ADDRESS =(PROTOCOL = TCP)(HOST = cea28583cb1c)(PORT = 1521)))
Services Summary... 服务摘要...
Service "PLSExtProc" has 1 instance(s). 服务“ PLSExtProc”具有1个实例。
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service... 状态为UNKNOWN的实例“ PLSExtProc”具有1个用于该服务的处理程序。
The command completed successfully 命令成功完成

What I already tried 我已经尝试过的

I tried both users, oracle and root. 我尝试了两个用户,oracle和root。
I changed permissions of /u01/app/oracle to 755 我将/ u01 / app / oracle的权限更改为755
I checked selinux, this seems not to be active/installed. 我检查了selinux,它似乎没有激活/安装。 At least thats what the docker info tells and I cant find sestatus command and /etc/selinux only contains semanage.conf. 至少这就是docker信息告诉我的东西,我找不到sestatus命令,/ etc / selinux仅包含semanage.conf。
I tried several different oracle images, same result in every container. 我尝试了几种不同的oracle映像,每个容器中的结果相同。

EDIT As requested, I tried starting oracle service myself: 编辑根据要求,我尝试自己启动oracle服务:

service oracle-xe start

Result of alert_XE.log: alert_XE.log的结果:

Starting ORACLE instance (normal) 启动ORACLE实例(正常)
LICENSE_MAX_SESSION = 0 LICENSE_MAX_SESSION = 0
LICENSE_SESSIONS_WARNING = 0 LICENSE_SESSIONS_WARNING = 0
Picked latch-free SCN scheme 3 选择了无锁存SCN方案3
Using LOG_ARCHIVE_DEST_1 parameter default value as USE_DB_RECOVERY_FILE_DEST 使用LOG_ARCHIVE_DEST_1参数默认值作为USE_DB_RECOVERY_FILE_DEST
Autotune of undo retention is turned on. 撤消保留的自动调整功能已打开。
IMODE=BR IMODE = BR
ILAT =19 伊拉特= 19
LICENSE_MAX_USERS = 0 LICENSE_MAX_USERS = 0
SYS auditing is disabled SYS审核已禁用
Starting up: 启动:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production. Oracle Database 11g Express Edition 11.2.0.2.0版-64位生产。
Using parameter settings in server-side spfile /u01/app/oracle/product/11.2.0/xe/dbs/spfileXE.ora 在服务器端spfile /u01/app/oracle/product/11.2.0/xe/dbs/spfileXE.ora中使用参数设置
System parameters with non-default values: 具有非默认值的系统参数:
sessions = 176 会话数= 176
sga_target = 576M sga_target = 576M
control_files = "/u01/app/oracle/oradata/XE/control.dbf" control_files =“ /u01/app/oracle/oradata/XE/control.dbf”
compatible = "11.2.0.0.0" 兼容=“ 11.2.0.0.0”
db_recovery_file_dest = "/u01/app/oracle/fast_recovery_area" db_recovery_file_dest =“ / u01 / app / oracle / fast_recovery_area”
db_recovery_file_dest_size= 10G db_recovery_file_dest_size = 10G
undo_management = "AUTO" undo_management =“自动”
undo_tablespace = "UNDOTBS1" undo_tablespace =“ UNDOTBS1”
remote_login_passwordfile= "EXCLUSIVE" remote_login_passwordfile =“独家”
dispatchers = "(PROTOCOL=TCP) (SERVICE=XEXDB)" 调度员=“(PROTOCOL = TCP)(SERVICE = XEXDB)”
shared_servers = 4 shared_servers = 4
job_queue_processes = 4 job_queue_processes = 4
audit_file_dest = "/u01/app/oracle/admin/XE/adump" audit_file_dest =“ / u01 / app / oracle / admin / XE / adump”
db_name = "XE" db_name =“ XE”
open_cursors = 300 open_cursors = 300
pga_aggregate_target = 195840K pga_aggregate_target = 195840K
diagnostic_dest = "/u01/app/oracle" diagnostic_dest =“ / u01 / app / oracle”

Solved the puzzle, finally. 终于解决了难题。

It turned out that SELinux was active. 事实证明SELinux是活跃的。 I don't know how I missed that some weeks ago. 我不知道几周前我怎么想念它。 I definitely checked that, but maybe I was within the container and not the host. 我肯定检查过,但也许我在容器内而不是主机内。 So I ran the container with the --privileged flag and suddenly I can connect to the db. 因此,我使用--privileged标志运行了容器,然后突然我可以连接到数据库了。

Thanks for your comments and sorry that I posted it here, you are right @jww. 感谢您的评论,对不起,我将其发布在这里,您说对了@jww。 I will make sure to only post programming questions here in the future. 我将确保以后只在此处发布编程问题。 Sorry for that. 抱歉

You can also edit /etc/sysconfig/docker and remove --selinux-enabled from options that's usually added by default. 您还可以编辑/etc/sysconfig/docker --selinux-enabled从通常默认情况下添加的选项中删除--selinux-enabled Then restart docker service: 然后重启docker服务:

sudo systemctl restart docker

or 要么

sudo service docker restart

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM