【发布时间】:2021-05-30 16:53:57
【问题描述】:
我已经为 oracle 19c 创建了一个图像。我已经使用以下命令启动了我的容器。
docker run --name oracledb -d -p 1527:1521 -p 5700:5500 -e ORACLE_PWD=password1 -e ORACLE_CHARACTERSET=AL32UTF8 -v /d/docker-code/oracle-data oracle/database:19.3.0-ee
创建容器后,我可以登录容器。我可以在容器内使用以下命令进行连接。
sqlplus system/password1@172.17.0.2:1527/ORCLCDB
在容器之外,从 cmd,我无法连接到那个 oracle 实例。
注意:我已经在 windows 机器上的默认端口 1521 上安装了 oracle。
listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.17.0.2)(PORT = 1527))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ORCLCDB)
(ORACLE_HOME = /opt/oracle/product/19c/dbhome_1)
(SID_NAME = ORCLCDB)
)
)
DEDICATED_THROUGH_BROKER_LISTENER=OFF
DIAG_ADR_ENABLED = off
tnsnames.ora
ORCLCDB=172.17.0.2:1527/ORCLCDB
ORCLPDB1=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.17.0.2)(PORT = 1527))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCLPDB1)
)
)
我无法从 SQL Developer 或 CMD 进行连接。当我尝试访问 docker 容器外部时,我会遇到超时错误。
ERROR:
ORA-12170: TNS:Connect timeout occurred
请指导我解决此问题。
提前致谢。
【问题讨论】:
-
您是否在 Windows 网络 IP 中添加了
172.17.0.2?我的意思是你能ping172.17.0.2吗? -
172.17.0.2我无法ping通这个IP。我没有添加 Windows 网络 IP。我该如何添加这个? -
以管理员身份运行命令提示符程序,然后运行
ipconfig查看是否存在。我对 Windows 中的 Docker 还不够熟悉,但在 Linux 中它增加了。 -
您的容器端口是 1527,因此:-p [host_port]:[container_port] -> -p 1521:1527。但由于 1521 已经被占用,所以 make 是别的东西-> -p 1522:1527。现在可以连接了:sqlplus system/password1@localhost:1522/ORCLCDB
-
@BjarteBrandt - 我需要更改 docker 文件中的某些内容还是在为 oracle 19c 创建映像时?截至目前,我在创建 docker 映像时已将端口值从 1521 更改为 1527。通过您建议的更改,我仍然无法连接到容器外部。在 docker 容器内,我可以连接到这个,
sqlplus system/password1@localhost:1527/ORCLCDB但在 docker 容器之外,我无法连接到这个,sqlplus system/password1@localhost:1522/ORCLCDB
标签: oracle docker oracle-sqldeveloper docker-for-windows oracle19c