【问题标题】:ASP.NET Core with Docker support: Connection refused具有 Docker 支持的 ASP.NET Core:连接被拒绝
【发布时间】:2018-01-24 21:05:01
【问题描述】:

我有一个支持 Docker 的 ASP .NET Core (v2.0) 应用程序。 我想在启动我的应用程序时启动一个 Oracle 数据库。 这就是我的 docker-compose 文件的样子:

version: '3'

services:
  devarttestapp:
    image: devarttestapp
    build:
      context: ./DevartTestApp
      dockerfile: Dockerfile

  oracledb:
    image: sath89/oracle-12c
    ports: 
      - "1521:1521"

我使用 Devart 数据提供程序 dotConnect for Oracle。

var conn = new Devart.Data.Oracle.OracleConnection();
conn.ConnectionString = Environment.GetEnvironmentVariable("ORACLE_CONNECTION_STRING");
try
{
    conn.Open();
}
catch (Exception e)
{
    Console.WriteLine(e);
    throw;
}

但是当我尝试连接到创建的 Oracle DB 容器的数据库时,出现以下异常:

System.Net.Internals.SocketExceptionFactory+ExtendedSocketException(连接被拒绝 127.0.0.1:1521)

我还尝试在我的 docker-compose 文件中包含depends_on 和networks 选项,结果相同。

此异常的原因可能是什么?
我该如何解决这个问题?

【问题讨论】:

标签: asp.net .net oracle docker


【解决方案1】:

从容器中,你能把这个命令的输出发给我吗?

apt-get update && apt-get install nmap -y && nmap -p 1521 localhost

如果您不熟悉如何在容器内访问 bash,可以这样做:

查找您的容器 ID 或名称:docker ps 连接到 BASH:docker exec -it >containerID< /bin/bash

我感觉他的问题与 Oracle 而不是 Docker 有关,因为您的 docker-compose 文件看起来是正确的。也许侦听器尚未启用。如果nmap 表示端口不是open,我也会感谢lsnrctl status 的输出。

https://docs.oracle.com/cd/E11882_01/network.112/e41945/listenercfg.htm#NETAG010

【讨论】:

  • 这是输出:本地主机 (127.0.0.1) 的 Nmap 扫描报告主机已启动(0.00015 秒延迟)。 localhost 的其他地址(未扫描):127.0.0.1 PORT STATE SERVICE 1521/tcp open oracle Nmap done: 1 IP 地址(1 host up)在 0.36 秒内扫描
  • 这是 lsnrctl status: LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 16-AUG-2017 19:09:32 Connecting to (ADDRESS=(PROTOCOL=tcp)( HOST=)(PORT=1521)) LISTENER 的状态 ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 12.1.0.2.0 - 生产开始日期 16-AUG-2017 19:04:26 正常运行时间 0 天 0 小时。 5分钟。 6 秒跟踪级别关闭安全开启:本地操作系统身份验证 SNMP 关闭
  • 第 2 部分:侦听器日志文件 /u01/app/oracle/diag/tnslsnr/6d592052063a/listener/alert/log.xml 侦听端点摘要...(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp )(HOST=6d592052063a)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=6d592052063a)(PORT=8080))(Presentation=HTTP)(Session=RAW)) 服务摘要.. . 服务“xe.oracle.docker”有 1 个实例。实例“xe”,状态 READY,有 1 个用于此服务的处理程序...服务“xeXDB.oracle.docker”有 1 个实例。实例“xe”,状态 READY,有 1 个用于此服务的处理程序...命令成功完成
  • 好的,Oracle 运行正常,服务端口转发。我怀疑您没有正确连接到数据库。此错误消息System.Net.Internals.SocketExceptionFactory+ExtendedSocketException (Connection refused 127.0.0.1:1521) 表示您尝试连接到在 localhost (127.0.0.1) 上运行的 Oracle 数据库。此错误消息是从容器内生成的吗?如果您尝试从容器外部访问在容器中运行的数据库并且收到该错误,那么您的目标是您的机器而不是容器。
  • 您可以尝试使用sqlplus 从容器内连接到Oracle 数据库吗?我认为您只需从运行数据库的用户帐户执行sqlplus / as sysdba。 (除非 SID 在环境变量中全局导出)另外,请使用 GitHub Gist 等外部平台共享所有未来代码并记录 sn-ps 以提高可读性。这些 cmets 是眼睛疲劳。
【解决方案2】:

我在我的 Mac 上遇到了同样的问题。我使用 > 9000 的端口解决了它。

【讨论】:

    【解决方案3】:

    只需在连接字符串中添加SslMode=None;

      "ConnectionStrings": {
        "DefaultConnection": "Server=db-host; Database=db-name; Uid=db-user; Pwd=db-pwd; SslMode=None;"
      },
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-10
      • 2018-07-03
      • 2020-02-22
      • 2016-02-14
      • 2018-07-14
      • 1970-01-01
      • 1970-01-01
      • 2021-06-27
      相关资源
      最近更新 更多