Oracle-12c

Docker 到 Docker Oracle 12c 連接

  • May 2, 2019

我正在嘗試使用兩個帶有 oracle 數據庫 12c (store/oracle/database-enterprise:12.2.0.1) 的 docker 容器來執行一個簡單的練習。執行兩個容器非常簡單,但是我無法從一個容器連接到另一個容器,我錯過了什麼?兩個容器都在同一台機器(MacBook)上執行,並且都使用同一個網路,我可以通過 ping 訪問它們

任何幫助都會非常有用

我正在使用的命令:

docker container run -d -h localdomain --name odbc -p 1521:1521 -p 5500:5500 -e DB_SID=ORCLCDB -e DB_PDB=ORCLPDB1 -e DB_DOMAIN=localdomain store/oracle/database-enterprise:12.2.0.1-slim

docker container run -d -h localdomain --name odbc2 -p 1522:1521 -p 5501:5500 -e DB_SID=ORCLCDB -e DB_PDB=ORCLPDB1 -e DB_DOMAIN=localdomain store/oracle/database-enterprise:12.2.0.1-slim
  1. 確保數據庫已啟動並以健康狀態執行
docker container ps
  1. 如果嘗試通過 sqlplus 或任何 3rd 方 gui 工具從主機連接到容器並在主機上的 tnsnames.ora 中設置連接,請確保在主機上安裝 Oracle 即時客戶端

3̶. S̶e̶t̶̶u̶p̶̶c̶o̶n̶n̶e̶c̶t̶i̶o̶n̶s̶̶i̶n̶̶t̶n̶s̶n̶a̶m̶e̶s̶.̶o̶r̶a̶̶o̶n̶̶b̶o̶t̶h̶̶c̶o̶n̶t̶a̶i̶n̶e̶r̶s̶.̶(跳過此步驟)

  1. 確保 Oracle 偵聽器已啟動並正在執行,您可以通過執行命令找出每個容器上的服務名稱
lsnrctl status 
  1. 您需要找出映射的埠。執行命令
docker port orcl

從我的容器輸出是:

$ docker port orcl
1521/tcp -> 0.0.0.0:32769
5500/tcp -> 0.0.0.0:32768
  1. 您可以直接從 sqldeveloper 連接或在 tnsnames.ora 中為 sqlplus 客戶端設置 tns 條目。

這是從 sqldeveloper 連接的螢幕截圖 SqlDeveloper

對於主機上的 sqlplus 客戶端

#tnsname entry for container 1
orclcdb =
(DESCRIPTION =
 # host ipaddress and mapped port for 1521 is 32769
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.101)(PORT = 32769))
(CONNECT_DATA =
(SERVER = DEDICATED)
#service name from lsnrctl status command
(SERVICE_NAME = ORCLCDB.localdomain)
)
)
  1. 使用來自主機的命令驗證 tnsname 條目:
tnsping  orclcdb

筆記

我的設置是在 Windows 10(主機)和 VM 上執行的 docker 上。我執行了以下命令來查找 docker VM 的 ipaddress

輸入:

docker-machine ls

輸出:

在此處輸入圖像描述


更正:

我沒有註意到-p 1521:1521容器啟動命令的參數。該參數公開埠 1521。只需使用容器 ipaddress(來自 docker-machine ls)和相同的埠 1521 用於來自主機的 sqlplus 客戶端連接。

引用自:https://dba.stackexchange.com/questions/209712