首页 > 其他分享 >一个进入容器后curl的不对的问题诊断

一个进入容器后curl的不对的问题诊断

时间:2024-02-06 20:56:33浏览次数:28  
标签:容器 x86 lib gnu 诊断 64 usr linux curl

一个容器,进入容器的时候是否开启gpu,会导致 curl 的行为不一致。具体表现为

容器开启 --gpus all 后进入容器,执行 curl 会出现“curl: symbol lookup error: curl: undefined symbol: curl_mime_free” 错误

诊断中,我先比对了两个 --version 是否一致。
开启前和开启后的版本信息里有一行不一致:
开启前:

Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp

开启后:

Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smb smbs smtp smtps telnet tftp

我一开始以为是否是环境变量不同导致的,查看了环境变量,开启前和开启后差了一个

NVIDIA_VISIBLE_DEVICES=all

把这个环境变量通过unset NVIDIA_VISIBLE_DEVICES 也不解决问题,看着不是环境变量问题。

接着,通过 which curl 比对,发现开启前和开启后的curl的位置不一样:

开启前:/usr/bin/curl
开启后:/usr/local/bin/curl

两个curl的链接库也差异很大(使用 ldd /usr/bin/curlldd /usr/local/bin/curl 查看)。

前者:

linux-vdso.so.1 =>  (0x00007ffe2c56e000)
libcurl.so.4 => /usr/local/lib/libcurl.so.4 (0x00007fc68b1b7000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc68af9a000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc68abd0000)
libssl.so.1.0.0 => /lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007fc68a968000)
libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007fc68a523000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fc68a309000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc68b42e000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fc68a105000)

后者:

linux-vdso.so.1 =>  (0x00007ffceeb66000)
libcurl.so.4 => /usr/lib/x86_64-linux-gnu/libcurl.so.4 (0x00007ffad7e52000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ffad7c35000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ffad786b000)
libidn.so.11 => /usr/lib/x86_64-linux-gnu/libidn.so.11 (0x00007ffad7638000)
librtmp.so.1 => /usr/lib/x86_64-linux-gnu/librtmp.so.1 (0x00007ffad741c000)
libssl.so.1.0.0 => /lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007ffad71b4000)
libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007ffad6d6f000)
libgssapi_krb5.so.2 => /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007ffad6b25000)
liblber-2.4.so.2 => /usr/lib/x86_64-linux-gnu/liblber-2.4.so.2 (0x00007ffad6916000)
libldap_r-2.4.so.2 => /usr/lib/x86_64-linux-gnu/libldap_r-2.4.so.2 (0x00007ffad66c5000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007ffad64ab000)
/lib64/ld-linux-x86-64.so.2 (0x00007ffad80c4000)
libgnutls.so.30 => /usr/lib/x86_64-linux-gnu/libgnutls.so.30 (0x00007ffad617a000)
libhogweed.so.4 => /usr/lib/x86_64-linux-gnu/libhogweed.so.4 (0x00007ffad5f47000)
libnettle.so.6 => /usr/lib/x86_64-linux-gnu/libnettle.so.6 (0x00007ffad5d11000)
libgmp.so.10 => /usr/lib/x86_64-linux-gnu/libgmp.so.10 (0x00007ffad5a91000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ffad588d000)
libkrb5.so.3 => /usr/lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007ffad55bb000)
libk5crypto.so.3 => /usr/lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007ffad538c000)
libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007ffad5188000)
libkrb5support.so.0 => /usr/lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007ffad4f7d000)
libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007ffad4d62000)
libsasl2.so.2 => /usr/lib/x86_64-linux-gnu/libsasl2.so.2 (0x00007ffad4b47000)
libgssapi.so.3 => /usr/lib/x86_64-linux-gnu/libgssapi.so.3 (0x00007ffad4906000)
libp11-kit.so.0 => /usr/lib/x86_64-linux-gnu/libp11-kit.so.0 (0x00007ffad46a2000)
libtasn1.so.6 => /usr/lib/x86_64-linux-gnu/libtasn1.so.6 (0x00007ffad448f000)
libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007ffad428b000)
libheimntlm.so.0 => /usr/lib/x86_64-linux-gnu/libheimntlm.so.0 (0x00007ffad4082000)
libkrb5.so.26 => /usr/lib/x86_64-linux-gnu/libkrb5.so.26 (0x00007ffad3df8000)
libasn1.so.8 => /usr/lib/x86_64-linux-gnu/libasn1.so.8 (0x00007ffad3b56000)
libhcrypto.so.4 => /usr/lib/x86_64-linux-gnu/libhcrypto.so.4 (0x00007ffad3923000)
libroken.so.18 => /usr/lib/x86_64-linux-gnu/libroken.so.18 (0x00007ffad370d000)
libffi.so.6 => /usr/lib/x86_64-linux-gnu/libffi.so.6 (0x00007ffad3505000)
libwind.so.0 => /usr/lib/x86_64-linux-gnu/libwind.so.0 (0x00007ffad32dc000)
libheimbase.so.1 => /usr/lib/x86_64-linux-gnu/libheimbase.so.1 (0x00007ffad30cd000)
libhx509.so.5 => /usr/lib/x86_64-linux-gnu/libhx509.so.5 (0x00007ffad2e82000)
libsqlite3.so.0 => /usr/lib/x86_64-linux-gnu/libsqlite3.so.0 (0x00007ffad2bad000)
libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007ffad2975000)

我看了下容器的 PATH,里面只有指定了 /usr/local/bin,没有设置 /usr/bin 比 /usr/local/bin 优先级更高。

临时解决方法也很简单,在Python脚本里临时 patch下:

import os

def curl_patch():

	curl_patch_cmds = [
	    'mv -f /usr/local/bin/curl /usr/local/bin/curl.bak',
	    'ln -s /usr/bin/curl /usr/local/bin/curl'
	]

	for curl_patch_cmd in curl_patch_cmds:
	    ret = os.system(curl_patch_cmd)
	    logger.info('curl_patch_cmd:', curl_patch_cmd, 'ret:', ret)

这个问题的本质是对基础设施的路径管理问题。混合容器后就变成一个疑难问题了。

--end--

标签:容器,x86,lib,gnu,诊断,64,usr,linux,curl
From: https://www.cnblogs.com/math/p/18010291/container-gpus-all-curl-issue

相关文章

  • 并发容器【ConcurentHashMap、CopyOnWriteArrayList、阻塞队列、ArrayBlockingQueue】
    (并发容器)转自极客时间什么是并发容器?在JUC包中,有一大部分是关于并发容器的,如ConcurrentHashMap,ConcurrentSkipListMap,CopyOnWriteArrayList及阻塞队列。这里将介绍使用频率、面试中出现频繁的最高的ConcurrentHashMap和阻塞队列。注意:这里说到的容器概念,相当于我们理解中......
  • 极致成本,如何基于容器计算服务 ACS 打造企业级幻兽帕鲁私服 SaaS 服务?
    作者:韩运韬(青炽)《幻兽帕鲁》是一款最近大热的开放世界生存游戏。据报道。上市不到一周,《幻兽帕鲁》销量已突破700万份,成为名副其实的现象级游戏。根据游戏数据库网站SteamDB的数据显示,《幻兽帕鲁》Steam同时在线人数最高达到201万,成为史上同时在线玩家数量最高的付费游戏......
  • k8s容器秒级事件监控软件-Kube-eventer
    下面是kube-eventer的github开源地址:https://github.com/AliyunContainerService/kube-eventer ---apiVersion:v1data:content:>-{"EventType":"{{.Type}}","EventNamespace":"{{.InvolvedObject.Namespace}}"......
  • Java-08常用容器
    List接口:java.util.List<>。实现:java.util.ArrayList<>:变长数组java.util.LinkedList<>:双链表函数:add():在末尾添加一个元素clear():清空size():返回长度isEmpty():是否为空get(i):获取第i个元素set(i,val):将第i个元素设置为val栈类:java.util.Stack<>函......
  • Docker容器第三课:企业级应用部署-实战
    一、docker容器化部署企业级应用1.1使用容器化部署企业级应用必要性1.有利于快速实现企业级应用部署2.有利于实现企业级应用恢复1.2Docker参考资料官方网站 http://hub.docker.com/二、docker安装部署系统环境:CentOS72.1安装前准备工作查看内核版本是否大于3.10[jack@TEST~]#u......
  • java Atomic原子类&&常见并发容器
    Atomic原子类Atomic原子类介绍Atomic翻译成中文是原子的意思。在这里Atomic是指一个操作是不可中断的。即使是在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰。所以,所谓原子类说简单点就是具有原子/原子操作特征的类。并发包 java.util.concurrent 的原......
  • 安装dotnet下的诊断工具
    1.安装dotnet下的三个诊断工具dotnet-counters一个性能监视工具,用于临时运行状况监视和初级性能调查,你可以通过命令查看和存储,当前程序的运行时信息,它可以收集CPU,内存,GC,线程,异常等信息dotnet-trace一个跨平台的.NETCore工具,在不使用本机探查器的情况下启用正在运行的进......
  • Docker启动的容器设置开机自启动
    参考:https://www.cnblogs.com/hengdin/articles/17838930.htmldocker容器如果需要在开机实现自启动可以在启动的时候加以下参数--restart=always例如启动一个MySQL容器需要开机自启则使用以下命令启动容器#dockerrun-d--namemysql-p3306:3306--restart=alwaysalwa......
  • JUC【1.原子类、2.锁Lock、3.阻塞队列、4.并发集合容器、5.并发工具类、6.线程池】、
    (JUC简介)转自极客时间1.JUC简介从JDK1.5起,JavaAPI中提供了java.util.concurrent(简称JUC)包,在此包中定义了并发编程中很常用的工具,比如:线程池、阻塞队列、同步器、原子类等等。JUC是JSR166标准规范的一个实现,JSR166以及JUC包的作者是同一个人DougLea。2.原......
  • 如何实现Laravel的服务容器
    1.容器的本质服务容器本身就是一个数组,键名就是服务名,值就是服务。服务可以是一个原始值,也可以是一个对象,可以说是任意数据。服务名可以是自定义名,也可以是对象的类名,也可以是接口名。//服务容器$container=[//原始值'text'=>'这是一个字符串',//自定义服务......