【问题标题】:Docker SQL bind: An attempt was made to access a socket in a way forbidden by its access permissionsDocker SQL 绑定:试图以访问权限禁止的方式访问套接字
【发布时间】:2019-08-01 20:45:10
【问题描述】:

在 Docker 中为 SQL 服务器创建容器时出现错误消息(具有管理员权限):

"... 来自守护进程的错误响应:驱动程序外部编程失败 端点 SQL19b 上的连接 (cc372bb961fb8178c2461d26bf16c4232a62e01c5f48b8fcec273370506cc095): 启动用户态代理时出错:listen tcp 0.0.0.0:1433: bind: An 试图以访问禁止的方式访问套接字 权限。”

日志文件摘录:

    [21:39:17.692][ApiProxy          ][Info   ] time="2019-08-01T21:39:17+02:00" msg="proxy >> HEAD /_ping\n"
[21:39:17.696][ApiProxy          ][Info   ] time="2019-08-01T21:39:17+02:00" msg="proxy << HEAD /_ping (3.9929ms)\n"
[21:39:17.699][GoBackendProcess  ][Info   ] error CloseWrite to: The pipe is being closed.
[21:39:17.742][ApiProxy          ][Info   ] time="2019-08-01T21:39:17+02:00" msg="proxy >> DELETE /v1.40/containers/22810276e261\n"
[21:39:17.758][ApiProxy          ][Info   ] time="2019-08-01T21:39:17+02:00" msg="proxy << DELETE /v1.40/containers/22810276e261 (16.129ms)\n"
[21:39:17.759][GoBackendProcess  ][Info   ] error CloseWrite to: The pipe is being closed.
[21:39:27.866][ApiProxy          ][Info   ] time="2019-08-01T21:39:27+02:00" msg="proxy >> HEAD /_ping\n"
[21:39:27.869][ApiProxy          ][Info   ] time="2019-08-01T21:39:27+02:00" msg="proxy << HEAD /_ping (1.6595ms)\n"
[21:39:27.870][GoBackendProcess  ][Info   ] error CloseWrite to: The pipe is being closed.
[21:39:27.894][ApiProxy          ][Info   ] time="2019-08-01T21:39:27+02:00" msg="proxy >> POST /v1.40/containers/create?name=SQLLinuxLocalPersist\n"
[21:39:27.908][APIRequestLogger  ][Info   ] [db460e2b-7d77-4756-be19-665715a9a182] POST http://unix/usage
[21:39:27.909][APIRequestLogger  ][Info   ] [db460e2b-7d77-4756-be19-665715a9a182] POST http://unix/usage -> 200 OK took 0ms
[21:39:27.909][ApiProxy          ][Info   ] time="2019-08-01T21:39:27+02:00" msg="Rewrote mount C:\\Docker\\SQL:/sql (volumeDriver=) to /host_mnt/c/Docker/SQL:/sql"
[21:39:28.049][ApiProxy          ][Info   ] time="2019-08-01T21:39:28+02:00" msg="proxy << POST /v1.40/containers/create?name=SQLLinuxLocalPersist (154.5485ms)\n"
[21:39:28.050][ApiProxy          ][Info   ] time="2019-08-01T21:39:28+02:00" msg="proxy >> POST /v1.40/containers/89d13c9d2d2bae095cf66e94b5bb60907a50cb199eb2bdcef9845d493435be07/wait?condition=next-exit\n"
[21:39:28.052][GoBackendProcess  ][Info   ] error CloseWrite to: The pipe is being closed.
[21:39:28.080][APIRequestLogger  ][Info   ] [a9a496c9-767a-4bd2-917c-f3f1391609dc] POST http://unix/usage
[21:39:28.082][APIRequestLogger  ][Info   ] [a9a496c9-767a-4bd2-917c-f3f1391609dc] POST http://unix/usage -> 200 OK took 0ms
[21:39:28.060][ApiProxy          ][Info   ] time="2019-08-01T21:39:28+02:00" msg="proxy >> POST /v1.40/containers/89d13c9d2d2bae095cf66e94b5bb60907a50cb199eb2bdcef9845d493435be07/start\n"
[21:39:28.088][APIRequestLogger  ][Info   ] [89bf69bf-5084-4d4b-a887-c7acb99bf131] POST http://unix/usage
[21:39:28.088][APIRequestLogger  ][Info   ] [6ca0e28f-bba3-4f66-afc5-43f6d486c8a2] POST http://unix/usage
[21:39:28.089][APIRequestLogger  ][Info   ] [89bf69bf-5084-4d4b-a887-c7acb99bf131] POST http://unix/usage -> 200 OK took 0ms
[21:39:28.089][APIRequestLogger  ][Info   ] [6ca0e28f-bba3-4f66-afc5-43f6d486c8a2] POST http://unix/usage -> 200 OK took 0ms
[21:39:28.067][ApiProxy          ][Info   ] time="2019-08-01T21:39:28+02:00" msg="mount point type:bind"
[21:39:28.068][ApiProxy          ][Info   ] time="2019-08-01T21:39:28+02:00" msg="mount point:/host_mnt/c/Docker/SQL"
[21:39:28.205][Moby              ][Info   ] [ 2254.975742] docker0: port 1(veth69918f7) entered blocking state
[21:39:28.250][Moby              ][Info   ] [ 2255.087127] docker0: port 1(veth69918f7) entered disabled state
[21:39:28.295][Moby              ][Info   ] [ 2255.132041] device veth69918f7 entered promiscuous mode
[21:39:28.354][Moby              ][Info   ] [ 2255.176944] IPv6: ADDRCONF(NETDEV_UP): veth69918f7: link is not ready
[21:39:28.439][GoBackendProcess  ][Info   ] Adding tcp forward from 0.0.0.0:1433 to 172.17.0.2:1433
[21:39:28.560][Moby              ][Info   ] [ 2255.385920] docker0: port 1(veth69918f7) entered disabled state
[21:39:28.616][Moby              ][Info   ] [ 2255.442735] device veth69918f7 left promiscuous mode
[21:39:28.667][Moby              ][Info   ] [ 2255.497549] docker0: port 1(veth69918f7) entered disabled state
[21:39:28.826][ApiProxy          ][Info   ] time="2019-08-01T21:39:28+02:00" msg="proxy << POST /v1.40/containers/89d13c9d2d2bae095cf66e94b5bb60907a50cb199eb2bdcef9845d493435be07/start (767.0192ms)\n"
[21:39:28.829][GoBackendProcess  ][Info   ] error CloseWrite to: The pipe is being closed.
[21:39:28.834][ApiProxy          ][Info   ] time="2019-08-01T21:39:28+02:00" msg="Cancel connection..."
[21:39:28.836][ApiProxy          ][Info   ] time="2019-08-01T21:39:28+02:00" msg="proxy << POST /v1.40/containers/89d13c9d2d2bae095cf66e94b5bb60907a50cb199eb2bdcef9845d493435be07/wait?condition=next-exit (786.0411ms)\n"

这会导致创建了一个容器,但没有分配端口。因此无法启动 SQL 服务器。

Edit1:端口 1433 似乎没有被使用(至少它没有在“netstat -abn”下列出)

【问题讨论】:

    标签: sql-server docker


    【解决方案1】:

    我可以通过运行来修复它:

    net stop winnat
    net start winnat
    

    来源:https://github.com/docker/for-win/issues/9272#issuecomment-776225866

    【讨论】:

    • 也 - 以管理员身份在 cmd 中运行
    • 这对我有用
    • 谢谢!我花了几个小时试图找到解决方法。
    • 这对我也有用。这是一个非常随意的错误情况,因为它只是自发地发生而没有故意的冲突。我确实在跨越多天的长时间运行的 Windows 会话中得到它,在夜间被休眠中断。我想这是一些一般的稳定性错误......
    【解决方案2】:

    我遇到了同样的问题,我不想更改 MSSQL (1433) 的默认端口

    这是我为解决此问题所做的。

    确保您的端口未被使用,转到资源监视器进行验证。 现在检查端口是否保留。打开你的命令提示符并输入这个

    netsh int ipv4 show excludedportrange protocol=tcp
    

    此处列出的端口由 hyper-v 管理,此处删除端口 1433 的唯一方法是禁用 hyper-v,保留端口 1433,以免 hyper-v 将其保留回来。

    禁用 hyper-v

    dism.exe /Online /Disable-Feature:Microsoft-Hyper-V
    

    预留1433端口

    netsh int ipv4 add excludedportrange protocol=tcp startport=1433 numberofports=1
    

    重新启用 hyper-v

    dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All
    

    启动 docker 并运行你的容器

    【讨论】:

    • 您的禁用或启用命令我认为仅适用于 Windows 10 Pro。对于 Windows 10 Home,您可以使用“bcdedit /set hypervisorlaunchtype off”禁用并使用“auto”重新启用
    • 谢谢。我能够解决我的问题
    • "这里列出的端口是由 hyper-v 管理的" - 你怎么知道?
    【解决方案3】:

    检查您的端口是否在排除范围之一:

    netsh int ipv4 show excludedportrange protocol=tcp

    如果它被排除在外,您很可能会因为更改了动态端口开始范围的错误 Windows 更新而受到影响。

    netsh int ipv4 show dynamicport tcp检查动态启动端口范围,用netsh int ipv4 set dynamic tcp start=49152 num=16384修复它,重启后,排除端口范围应该已经改变了。

    来源:https://github.com/docker/for-win/issues/3171#issuecomment-554587817

    【讨论】:

    • 这节省了我的时间,谢谢!
    【解决方案4】:

    我在更新 docker 后遇到了这个问题。我重新启动了计算机,现在一切正常。尝试重新启动。

    【讨论】:

    • restart-service hns 也可能有效。
    【解决方案5】:

    我遇到了同样的问题。我按照以下步骤解决了这个问题:

    1. 下载并安装“Kitematic”。
    2. published IP:PORT 设置为localhost:111(端口1433 因未知原因无法工作)。
    3. 启动 sqlserver 映像。

    【讨论】:

      【解决方案6】:

      由于Hyper-V可能有一些端口,你可以通过netsh ipv4 show excludedportrange protocol=tcp检查,重启后这些端口会改变。

      您可以尝试restart-service nhs 更改Hyper-V 持有的端口,这可能会释放您想要的端口。

      【讨论】:

        猜你喜欢
        • 2020-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多