Docker 上的 Oracle :: ORA-12162: TNS:net 服务名称指定不正确

Oracle on Docker :: ORA-12162: TNS:net service name is incorrectly specified

我每次在 Oracle Docker 图像上登录 sqlplus 时都必须设置 $ORACLE_SID .

Steps to reproduce:

  1. 我登录到一个全新的 19c 映像,该映像刚从 Oracle 下载并安装:docker exec -it 19c bash
  2. 我检查$ORACLE_SID和命令echo $ORACLE_SIDreturn我一个空行(很奇怪!?)
  3. 所以我手动设置了 $ORACLE_SIDexport ORACLE_SID="ORCLCDB"
  4. 我再次检查 $ORACLE_SID,这次命令 echo $ORACLE_SID returns me ORCLCDB 这是我设置的正确名称
  5. 我使用 exit
  6. 从 bash Docker 终端退出
  7. 我重新登录docker exec -it 19c bash
  8. 我检查 $ORACLE_SID 是否与 echo $ORACLE_SID 保持一致,它 return 又给我一个空行

为什么更改不是永久性的?

容器启动后,no 可以change/add 环境变量。因此,最好的选择是 stop and remove the existing container, then recreate it with the correct environment variable. 在 Docker 中,您可以在 Docker 文件中使用 ENV 命令在图像上设置环境变量。您还可以配置在调用 docker run -e ...

时用于启动容器的默认环境