簡體   English   中英

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

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

我想實現的目標
我想通過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日星期三生產

版權所有(c)1982、2011,Oracle。 版權所有。

已連接到:Oracle Database 11g Express Edition 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日星期三生產

版權所有(c)1982、2011,Oracle。 版權所有。

錯誤:
ORA-01034:ORACLE不可用
ORA-27101:共享內存領域不存在
Linux-x86_64錯誤:2:沒有這樣的文件或目錄
進程ID:0
會話ID:0序列號:0

信息 Linux系統:

碼頭工人信息

[xx @ yy Docker] $ sudo docker信息
貨櫃:1
跑步:1
已暫停:0
已停止:0
圖片:33
伺服器版本:1.13.1
存儲驅動程序:devicemapper
池名稱:docker-8:17-4460587-pool
池塊大小: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:true
啟用延遲移除: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)
日志記錄驅動程序:已記錄日志
Cgroup驅動程序:systemd
插件:
數量:本地
網絡:網橋主機macvlan空覆蓋
授權:rhel-push-plugin
群:無效
運行時:oci runc
默認運行時:oci
初始化二進制文件:/ usr / libexec / docker / docker-init-current
容器版本:(預期:aa8187dbd3b7ad67d8e5e3a15115d3eef43a7ed1)
runc版本:不適用(預期:9df8b306d01f59d3a8029be411de015b7304dd8f)
初始版本:不適用(預期:949e6facb77383876aeff8a6944dde66b3089574)
安全選項:
的Seccomp
警告:您沒有使用默認的seccomp配置文件
設定檔:/etc/docker/seccomp.json
SELinux的
內核版本:4.11.9-300.fc26.x86_64
操作系統:Fedora 26(工作站版)
OSType:Linux
架構:x86_64
Docker掛鈎數量:3
處理器:8
總內存:7.776 GiB
名稱:yy.domain.de
ID:4YVE:4FQ7:27SF:5JZJ:H6RA:P4H5:TK6O:FAGY:CKHS:RQGQ:3BDS:L7W7
Docker根目錄:/ 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日志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 /固件

統計

root @ cea28583cb1c:/#stat /
文件:“ /”
大小:253塊:0 IO塊:4096目錄
設備:fd01h / 64769d索引節點: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狀態

適用於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)))
聆聽者的狀態
別名李斯特
適用於Linux的TNSLSNR版本:11.2.0.2.0版-生產
開始日期19-JUL-2017 07:33:46
正常運行時間0天3小時。 56分鍾 51秒
跟蹤電平關閉
安全性:本地操作系統身份驗證
SNMP關閉
默認服務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個實例。
狀態為UNKNOWN的實例“ PLSExtProc”具有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
伊拉特= 19
LICENSE_MAX_USERS = 0
SYS審核已禁用
啟動:
Oracle Database 11g Express Edition 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”
兼容=“ 11.2.0.0.0”
db_recovery_file_dest =“ / u01 / app / oracle / fast_recovery_area”
db_recovery_file_dest_size = 10G
undo_management =“自動”
undo_tablespace =“ UNDOTBS1”
remote_login_passwordfile =“獨家”
調度員=“(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。 我將確保以后只在此處發布編程問題。 抱歉

您還可以編輯/etc/sysconfig/docker --selinux-enabled從通常默認情況下添加的選項中刪除--selinux-enabled 然后重啟docker服務:

sudo systemctl restart docker

要么

sudo service docker restart

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM