Oracle-12c
Docker 到 Docker Oracle 12c 連接
我正在嘗試使用兩個帶有 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
- 確保數據庫已啟動並以健康狀態執行
docker container ps
- 如果嘗試通過 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̶.̶(跳過此步驟)
- 確保 Oracle 偵聽器已啟動並正在執行,您可以通過執行命令找出每個容器上的服務名稱
lsnrctl status
- 您需要找出映射的埠。執行命令
docker port orcl
從我的容器輸出是:
$ docker port orcl 1521/tcp -> 0.0.0.0:32769 5500/tcp -> 0.0.0.0:32768
- 您可以直接從 sqldeveloper 連接或在 tnsnames.ora 中為 sqlplus 客戶端設置 tns 條目。
對於主機上的 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) ) )
- 使用來自主機的命令驗證 tnsname 條目:
tnsping orclcdb
筆記
我的設置是在 Windows 10(主機)和 VM 上執行的 docker 上。我執行了以下命令來查找 docker VM 的 ipaddress
輸入:
docker-machine ls
輸出:
更正:
我沒有註意到
-p 1521:1521
容器啟動命令的參數。該參數公開埠 1521。只需使用容器 ipaddress(來自 docker-machine ls)和相同的埠 1521 用於來自主機的 sqlplus 客戶端連接。