Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从不同主机运行时,docker映像不同_C++_Docker_Gcc - Fatal编程技术网

C++ 从不同主机运行时,docker映像不同

C++ 从不同主机运行时,docker映像不同,c++,docker,gcc,C++,Docker,Gcc,在docker容器中构建第三方库(libtorch,如果需要的话)的过程中,我遇到了一个错误,即缺少一个include文件。 在Ubuntu 16.04主机上运行构建过程时,同样的构建过程运行良好,但在Ubuntu 18.04主机上运行时,文件丢失 经过一点追溯,我现在正在运行NVidia的基本容器,并查找该文件。 这是我得到的结果: Ubuntu 16.04主机: $ uname -a Linux ub-carmel 4.15.0-123-generic #126~16.04.1-Ubuntu

在docker容器中构建第三方库(
libtorch
,如果需要的话)的过程中,我遇到了一个错误,即缺少一个include文件。 在Ubuntu 16.04主机上运行构建过程时,同样的构建过程运行良好,但在Ubuntu 18.04主机上运行时,文件丢失

经过一点追溯,我现在正在运行NVidia的基本容器,并查找该文件。 这是我得到的结果:

Ubuntu 16.04主机

$ uname -a
Linux ub-carmel 4.15.0-123-generic #126~16.04.1-Ubuntu SMP Wed Oct 21 13:48:05 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

$ docker --version
Docker version 19.03.13, build 4484c46d9d

$ docker pull  nvcr.io/nvidia/cuda:11.1-cudnn8-devel-ubuntu18.04

11.1-cudnn8-devel-ubuntu18.04: Pulling from nvidia/cuda
Digest: sha256:c5bf5c984998cc18a3f3a741c2bd7187ed860dc6d993b6fb402d0effb9fe6579
Status: Image is up to date for nvcr.io/nvidia/cuda:11.1-cudnn8-devel-ubuntu18.04
nvcr.io/nvidia/cuda:11.1-cudnn8-devel-ubuntu18.04
$ docker run -it  nvcr.io/nvidia/cuda:11.1-cudnn8-devel-ubuntu18.04
root@2ecc17248fab:/# ll /usr/lib/gcc/x86_64-linux-gnu/7/include | grep ia32
-rw-r--r-- 1 root root   7817 Dec  4  2019 ia32intrin.h
$ uname -a
Linux ub-carmel-18-04 5.4.0-56-generic #62~18.04.1-Ubuntu SMP Tue Nov 24 10:07:50 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

$ docker --version
Docker version 19.03.14, build 5eb3275d40

$ docker pull  nvcr.io/nvidia/cuda:11.1-cudnn8-devel-ubuntu18.04

11.1-cudnn8-devel-ubuntu18.04: Pulling from nvidia/cuda
Digest: sha256:c5bf5c984998cc18a3f3a741c2bd7187ed860dc6d993b6fb402d0effb9fe6579
Status: Downloaded newer image for nvcr.io/nvidia/cuda:11.1-cudnn8-devel-ubuntu18.04
nvcr.io/nvidia/cuda:11.1-cudnn8-devel-ubuntu18.04
$ docker run -it  nvcr.io/nvidia/cuda:11.1-cudnn8-devel-ubuntu18.04
root@89f771e82a51:/# ll /usr/lib/gcc/x86_64-linux-gnu/7/include | grep ia32
root@89f771e82a51:/#
Ubuntu 18.04主机

$ uname -a
Linux ub-carmel 4.15.0-123-generic #126~16.04.1-Ubuntu SMP Wed Oct 21 13:48:05 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

$ docker --version
Docker version 19.03.13, build 4484c46d9d

$ docker pull  nvcr.io/nvidia/cuda:11.1-cudnn8-devel-ubuntu18.04

11.1-cudnn8-devel-ubuntu18.04: Pulling from nvidia/cuda
Digest: sha256:c5bf5c984998cc18a3f3a741c2bd7187ed860dc6d993b6fb402d0effb9fe6579
Status: Image is up to date for nvcr.io/nvidia/cuda:11.1-cudnn8-devel-ubuntu18.04
nvcr.io/nvidia/cuda:11.1-cudnn8-devel-ubuntu18.04
$ docker run -it  nvcr.io/nvidia/cuda:11.1-cudnn8-devel-ubuntu18.04
root@2ecc17248fab:/# ll /usr/lib/gcc/x86_64-linux-gnu/7/include | grep ia32
-rw-r--r-- 1 root root   7817 Dec  4  2019 ia32intrin.h
$ uname -a
Linux ub-carmel-18-04 5.4.0-56-generic #62~18.04.1-Ubuntu SMP Tue Nov 24 10:07:50 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

$ docker --version
Docker version 19.03.14, build 5eb3275d40

$ docker pull  nvcr.io/nvidia/cuda:11.1-cudnn8-devel-ubuntu18.04

11.1-cudnn8-devel-ubuntu18.04: Pulling from nvidia/cuda
Digest: sha256:c5bf5c984998cc18a3f3a741c2bd7187ed860dc6d993b6fb402d0effb9fe6579
Status: Downloaded newer image for nvcr.io/nvidia/cuda:11.1-cudnn8-devel-ubuntu18.04
nvcr.io/nvidia/cuda:11.1-cudnn8-devel-ubuntu18.04
$ docker run -it  nvcr.io/nvidia/cuda:11.1-cudnn8-devel-ubuntu18.04
root@89f771e82a51:/# ll /usr/lib/gcc/x86_64-linux-gnu/7/include | grep ia32
root@89f771e82a51:/#
如您所见,图像的sha256摘要是相同的(并且与NVidia的NGC摘要相匹配)

起初我认为include可能以某种隐藏的方式来自主机,但是
ia32intrin.h
文件存在于两台主机中

什么会导致这样的问题

编辑

为每个主机添加了
docker--version
输出。这是有区别的,但我怀疑这会导致这样的问题

编辑2

添加了
uname-a的输出

编辑3

docker版本的输出

Ubuntu 16

$ docker version
Client: Docker Engine - Community
 Version:           19.03.13
 API version:       1.40
 Go version:        go1.13.15
 Git commit:        4484c46d9d
 Built:             Wed Sep 16 17:02:59 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.13
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       4484c46d9d
  Built:            Wed Sep 16 17:01:30 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.3.7
  GitCommit:        8fba4e9a7d01810a393d5d25a3621dc101981175
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683
Ubuntu 18

$ docker version
Client: Docker Engine - Community
 Version:           19.03.14
 API version:       1.40
 Go version:        go1.13.15
 Git commit:        5eb3275d40
 Built:             Tue Dec  1 19:20:17 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.14
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       5eb3275d40
  Built:            Tue Dec  1 19:18:45 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.3.9
  GitCommit:        ea765aba0d05254012b0b9e595e995c09186427f
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683
所以我在不同的Ubuntu机器(EC2实例)上测试了它,在这种情况下,对于18.04和16.04,文件都存在。看来这是我机器上的问题。
有没有想过是什么原因导致了这种情况?

最好的猜测是Ubuntu 18.04主机上的拉取层不知何故损坏了。清理核武器的选择是重置docker。这将删除所有映像、卷、容器、日志、网络等所有内容,因此在运行此操作之前,请备份您想要保留的任何内容:

sudo -s # these commands need root
systemctl stop docker
rm -rf /var/lib/docker
systemctl start docker
exit # exit sudo

主机是否具有相同的体系结构?显示
uname-a
输出。@BMitch,谢谢。将其添加到帖子中看起来相同,切换到
docker-version
的输出,而不是
docker-version
。后者只显示CLI客户端版本,而忽略了docker主机本身。@JaapVersteegh,两者都给出了相同的
i386
result完全清除所有内容并强制其重新下载已解决的所有层。谢谢你们两位的帮助