英文:
Could not open '/lib64/ld-linux-x86-64.so.2' on CentOS8 container
问题
我正在一台M1 Mac上,尝试在一个CentOS 8的Docker容器中创建和构建一个Golang的rpm包。
我使用以下步骤在其中安装了Golang:
wget https://dl.google.com/go/go1.13.4.linux-amd64.tar.gz
sudo tar -C /usr/local -xf go1.13.4.linux-amd64.tar.gz
- 将
export PATH=$PATH:/usr/local/go/bin
添加到~/.bash_profile文件中 source ~/.bash_profile
但是当我运行go version
时,出现了以下错误:
qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory
我在网上查看了一些类似错误的解决方法,但是那些人的情况似乎与我的情况不同,我无法复制他们的解决方法。我应该怎么做才能在这个CentOS容器中正确安装Golang呢?
英文:
I am on a M1 Mac, trying to create and build a golang rpm package inside a CentOS 8 docker container.
I installed golang on it with:
wget https://dl.google.com/go/go1.13.4.linux-amd64.tar.gz
sudo tar -C /usr/local -xf go1.13.4.linux-amd64.tar.gz
- Adding
export PATH=$PATH:/usr/local/go/bin
to ~/.bash_profile source ~/.bash_profile
But when I run go version
I get the error:
qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory
I've taken a look online but the people with similar errors, seem to be in quite different scenarios that I can't replicate in this case. What can I do to actually install golang on this CentOS container?
答案1
得分: 2
希望你喜欢你的容器之旅,
关于你的错误信息,你可以查看这个链接:https://stackoverflow.com/questions/71040681/qemu-x86-64-could-not-open-lib64-ld-linux-x86-64-so-2-no-such-file-or-direc
但我也有一些建议,可能会对你有帮助:
由于我没有你的Dockerfile,我尝试使用以下内容:
FROM centos:8
RUN yum -y update && yum -y install wget
RUN wget https://dl.google.com/go/go1.13.4.linux-amd64.tar.gz
RUN sudo tar -C /usr/local -xf go1.13.4.linux-amd64.tar.gz
RUN echo "export PATH=$PATH:/usr/local/go/bin" >> ~/.bash_profile
RUN source ~/.bash_profile
让我们构建它:
❯ docker build -t so-go-version-centos8 .
问题是,使用centos8的Docker镜像,我无法更新或安装任何东西:
(https://serverfault.com/questions/1091791/the-latest-centos8-docker-image-cannot-run-yum)
❯ docker run -it centos:8
[root@d7c652e4ac65 /]# yum install wget
Failed to set locale, defaulting to C.UTF-8
CentOS Linux 8 - AppStream 0.0 B/s | 0 B 00:00
Errors during downloading metadata for repository 'appstream':
- Curl error (6): Couldn't resolve host name for http://mirrorlist.centos.org/?release=8&arch=x86_64&repo=AppStream&infra=container [Could not resolve host: mirrorlist.centos.org]
Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: Curl error (6): Couldn't resolve host name for http://mirrorlist.centos.org/?release=8&arch=x86_64&repo=AppStream&infra=container [Could not resolve host: mirrorlist.centos.org]
[root@d7c652e4ac65 /]# yum install golang
Failed to set locale, defaulting to C.UTF-8
CentOS Linux 8 - AppStream 95 B/s | 38 B 00:00
Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist
[root@d7c652e4ac65 /]# yum update
Failed to set locale, defaulting to C.UTF-8
CentOS Linux 8 - AppStream
因此,我决定避免系统更新和wget的安装,并使用dockerfile的ADD命令(ADD和COPY的区别在于,我们可以直接使用ADD从URL复制东西,而不仅限于主机文件系统),并使用dockerfile的ENV命令将go路径添加到$PATH环境变量中,这是我的dockerfile的样子:
FROM centos:8
ADD https://dl.google.com/go/go1.13.4.linux-amd64.tar.gz .
RUN tar -C /usr/local -xf go1.13.4.linux-amd64.tar.gz
ENV PATH=$PATH:/usr/local/go/bin
让我们构建它:
❯ docker build --no-cache -t so-go-version-centos8 -f dockerfile-centos8 .
[+] Building 14.2s (8/8) FINISHED
=> [internal] load build definition from dockerfile-centos8 0.0s
=> => transferring dockerfile: 218B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/centos:8 1.0s
=> CACHED https://dl.google.com/go/go1.13.4.linux-amd64.tar.gz 0.0s
=> CACHED [1/3] FROM docker.io/library/centos:8@sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177 0.0s
=> [2/3] ADD https://dl.google.com/go/go1.13.4.linux-amd64.tar.gz . 2.2s
=> [3/3] RUN tar -C /usr/local -xf go1.13.4.linux-amd64.tar.gz 7.5s
=> exporting to image 3.2s
=> => exporting layers 3.2s
=> => writing image sha256:26a8caea62889668498ca1d513b7db2c95b084a1d0020512e0c16dee365a880c 0.0s
=> => naming to docker.io/library/so-go-version-centos8 0.0s
/mnt/c/U/b/De/w/p/kind/manifests/stackoverflow/centos8-container-go-version ─────────────────────── 15s 02:21:46
❯ docker run -it so-go-version-centos8
[root@78947ab8771a /]# go version
go version go1.13.4 linux/amd64
[root@78947ab8771a /]#
它运行得很好。
由于Centos8的Docker镜像受到限制,我无法安装所需的内容,所以你可以将其替换为centos:7的Docker镜像。
解决方案2:尝试yum install golang
正如@Para建议的那样,你也可以直接使用yum安装golang,但是"yum install -y golang"不起作用。所以我们必须手动安装,就像我们已经做过的那样。
解决方案3:你可以直接使用官方的golang Docker镜像,例如:
❯ docker run -it golang:buster
root@ed9f31e4a45a:/go# go version
go version go1.18.1 linux/amd64
root@ed9f31e4a45a:/go#
希望这对你有帮助,bguess。
英文:
Hope you are enjoying you containers journey,
About your error message, you can check this: https://stackoverflow.com/questions/71040681/qemu-x86-64-could-not-open-lib64-ld-linux-x86-64-so-2-no-such-file-or-direc
But I also have some suggestions, that could help you:
Since i dont have your dockerfile, i tried with this one:
FROM centos:8
RUN yum -y update && yum -y install wget
RUN wget https://dl.google.com/go/go1.13.4.linux-amd64.tar.gz
RUN sudo tar -C /usr/local -xf go1.13.4.linux-amd64.tar.gz
RUN echo "export PATH=$PATH:/usr/local/go/bin" >> ~/.bash_profile
RUN source ~/.bash_profile
lets build it:
❯ docker build -t so-go-version-centos8 .
The problem is that with the centos8 docker images, i couldn't update or install anything:
(https://serverfault.com/questions/1091791/the-latest-centos8-docker-image-cannot-run-yum)
❯ docker run -it centos:8
[root@d7c652e4ac65 /]# yum install wget
Failed to set locale, defaulting to C.UTF-8
CentOS Linux 8 - AppStream 0.0 B/s | 0 B 00:00
Errors during downloading metadata for repository 'appstream':
- Curl error (6): Couldn't resolve host name for http://mirrorlist.centos.org/?release=8&arch=x86_64&repo=AppStream&infra=container [Could not resolve host: mirrorlist.centos.org]
Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: Curl error (6): Couldn't resolve host name for http://mirrorlist.centos.org/?release=8&arch=x86_64&repo=AppStream&infra=container [Could not resolve host: mirrorlist.centos.org]
[root@d7c652e4ac65 /]# yum install golang
Failed to set locale, defaulting to C.UTF-8
CentOS Linux 8 - AppStream 95 B/s | 38 B 00:00
Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist
[root@d7c652e4ac65 /]# yum update
Failed to set locale, defaulting to C.UTF-8
CentOS Linux 8 - AppStream
So I decided to avoid the system update and the installation of wget and use the dockerfile ADD command (the difference between ADD and COPY is that we can directly, with ADD, copy things from URLs instead of only our host filesystem) and adding go path to $PATH env variable with dockerfile ENV command, here is how my df looks like:
FROM centos:8
ADD https://dl.google.com/go/go1.13.4.linux-amd64.tar.gz .
RUN tar -C /usr/local -xf go1.13.4.linux-amd64.tar.gz
ENV PATH=$PATH:/usr/local/go/bin
lets build it:
❯ docker build --no-cache -t so-go-version-centos8 -f dockerfile-centos8 .
[+] Building 14.2s (8/8) FINISHED
=> [internal] load build definition from dockerfile-centos8 0.0s
=> => transferring dockerfile: 218B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/centos:8 1.0s
=> CACHED https://dl.google.com/go/go1.13.4.linux-amd64.tar.gz 0.0s
=> CACHED [1/3] FROM docker.io/library/centos:8@sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177 0.0s
=> [2/3] ADD https://dl.google.com/go/go1.13.4.linux-amd64.tar.gz . 2.2s
=> [3/3] RUN tar -C /usr/local -xf go1.13.4.linux-amd64.tar.gz 7.5s
=> exporting to image 3.2s
=> => exporting layers 3.2s
=> => writing image sha256:26a8caea62889668498ca1d513b7db2c95b084a1d0020512e0c16dee365a880c 0.0s
=> => naming to docker.io/library/so-go-version-centos8 0.0s
/mnt/c/U/b/De/w/p/kind/manifests/stackoverflow/centos8-container-go-version ─────────────────────── 15s 02:21:46
❯ docker run -it so-go-version-centos8
[root@78947ab8771a /]# go version
go version go1.13.4 linux/amd64
[root@78947ab8771a /]#
it worked well.
Centos8 docker image is then limited since i cant install what i need, So you can replace it by centos:7 docker image instead.
solution 2: try yum install golang
as @Para suggested, you could also directly install golang with yum, but "yum install -y golang" will not work. SO we have to install it manually, as we have done.
solution3: You can directly use an official golang docker image, i.e:
❯ docker run -it golang:buster
root@ed9f31e4a45a:/go# go version
go version go1.18.1 linux/amd64
root@ed9f31e4a45a:/go#
Hope this has helped you, bguess.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论