為驗證docker容器中發包,宿主機接收流程。用C寫了udp發包程式,在宿主機上使用
1、gcc syslogclient_c.c -o syslogclient_c 生成執行檔案;運行執行檔案驗證通過。
2、啟動一個docker容器,通過docker cp syslogclient_c dockername: /home 中
3、docker exec 進入docker容器,到Home目錄查看syslogclientc_c已拷貝成功;
4、docker 容器中進入Home目錄,./syslogclient_c 運行執行檔案,得到提示:
bash: ./syslogclient_c: No such file or directory
分析原因,一開始以為是權限問題, chmod 777 syslogclient_c 后再執行,仍然報
同樣的錯誤。上網搜索,看有的說是在/usr/bin下沒有檔案,則將檔案復制到/usr/bin下再執行,
仍然報同樣錯誤; 在“https://blog.csdn.net/RonnyJiang/article/details/70738260”中提到32位和64位的問題,在自己系統上宿主機上執行uname -a
Linux workcomputer 5.0.0-32-generic #34-Ubuntu SMP Wed Oct 2 02:06:48 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
在容器中執行uname -a:
Linux a0d056ac57e3 5.0.0-32-generic #34-Ubuntu SMP Wed Oct 2 02:06:48 UTC 2019 x86_64 Linux
都是64位,沒差別。在該參考貼中提到了用file查看執行檔案資訊,也在自己機子上采用file查看執行檔案
file syslogclient_c
syslogclient_c: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=0361d51a8a0f0f01ea42865b816a00a012823f9a, for GNU/Linux 3.2.0, not stripped
看到了“dynamically linked”,聯想到自己的docker 容器中還沒裝gcc等,推測應該是此動態庫連接原因。
驗證:
在宿主機上使用gcc -static 方式進行靜態連接,然后再拷貝到docker容器中運行,成功!!!感謝 RonnyJiang 的帖子啟發。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/23945.html
標籤:Docker
上一篇:vmware6如何接入互聯網專線
下一篇:使用idea開發spark程式,setMaster('local')就沒有問題,然而引數我換成'spark://172.17.0.2:7077),它就不行了
