docker只能解决环境差异 不能解决硬件架构差异

本想通过docker 在x86上建立服务程序镜像, 然后将镜像拷备到 SE5(arm8) 的机子上运行, 目前看是不行的, 服务程序必须在SE5(arm8)上编译才能正常运行. 测试结果来看, SE5(arm8) 机子拉取的redis之所以正常运行, 是因为docker自动根据所在系统拉取了匹配相同架构的镜像. 测试方式是通过在SE5(arm8)上

sudo docker run -id -v /data/docker_share:/media --name redis_test redis /bin/bash

启动容器, 拷备出 redis-server程序到本机, 然后执行strings redis-server |grep gcc |more命令:

可见 这个镜像中redis-server的可运行架构为aarch64

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这可能是因为您在Windows上构建了Docker映像,并在Linux上尝试运行它。由于Windows和Linux有不同的文件系统和内核,因此可能会导致某些问题。 在使用Docker构建映像时,请注意以下几点: 1. 确保您使用的基础映像与您的操作系统兼容。例如,如果您正在运行Linux,应使用Linux基础映像。 2. 如果您使用的是Windows主机,请确保在构建映像时使用Windows容器而不是Linux容器。您可以在Dockerfile中使用以下指令来指定容器类型: ``` # 使用Windows容器 FROM mcr.microsoft.com/windows/servercore:ltsc2019 # 使用Linux容器 FROM ubuntu:18.04 ``` 3. 如果您在Windows主机上构建Docker映像,并想要在Linux上运行它,请确保在构建Docker映像时使用正确的行尾符。Windows使用回车符(CR)和换行符(LF)作为行尾符,而Linux只使用换行符(LF)作为行尾符。因此,在Dockerfile中,您应该使用LF作为行尾符,否则可能会导致在Linux上运行时出现问题。 4. 确保在构建映像时使用与目标平台相同的CPU架构。例如,如果您的Linux服务器是基于ARM的,则应使用ARM架构构建映像。 希望这些提示可以帮助您解决问题。 ### 回答2: Windows打包的Docker镜像无法直接在Linux系统中运行,这是因为Windows和Linux有不同的操作系统架构和运行环境。 首先,Windows和Linux使用的是不同的操作系统内核。Windows使用NT内核,而Linux使用Linux内核。这两种内核的架构和功能有很大的区别,导致两者无法直接互通。 其次,在Docker镜像中,容器内运行的应用程序需要与宿主机的操作系统相兼容。因为Windows和Linux的操作系统架构和API接口不同,Docker镜像在Windows上构建的时候,使用的是针对Windows操作系统的API接口和依赖库,而在Linux上运行时,无法找到这些对应的接口和库,导致无法正确运行。 要在Linux系统中运行Windows打包的Docker镜像,可以考虑以下几种解决方案: 1. 使用基于Linux的容器运行时(如Docker CE),运行一个Windows虚拟机,并在其中运行Windows打包的Docker镜像。这样可以在Linux系统中运行Windows应用程序,但性能和资源消耗可能会受到一定的影响。 2. 重新构建Docker镜像,使其适配Linux操作系统。这意味着需要重新编译和调整应用程序的代码,以兼容Linux操作系统的API接口和依赖库。 3. 在Linux系统上使用Wine等工具,来运行Windows应用程序。Wine是一个开源的Windows兼容层,可以在Linux系统上运行一些Windows应用程序。不过,由于Wine的兼容性有限,无法保证Windows应用程序在Linux上的正常运行。 总之,由于Windows和Linux的操作系统差异,Windows打包的Docker镜像在Linux不能直接运行,需要根据实际情况选择合适的解决方案。 ### 回答3: Windows打包的Docker镜像无法在Linux中运行的原因是两个操作系统的核心结构不同。 首先,Windows和Linux使用不同的内核,即Windows使用Windows NT内核,而Linux使用Linux内核。这是两个完全不同的操作系统架构,因此它们在系统调用、进程管理和资源分配等方面存在显著差异。因此,Windows上构建的Docker镜像无法直接在基于Linux的主机上运行,因为两个内核不兼容,无法正确解释和处理像执行文件、系统调用等基本操作的方式。 其次,Windows和Linux使用不同的文件系统。Windows使用NTFS(New Technology File System),而Linux则使用不同的文件系统,例如EXT4。因此,Windows上构建的Docker镜像中的文件和目录路径是基于Windows文件系统结构的,而Linux主机无法正确解释和访问这些路径。 为了解决这个问题,开发人员可以使用跨平台的Docker镜像构建工具,例如Docker Compose,来构建在Windows和Linux上均可运行的镜像。另外,还可以在Windows上使用Linux子系统进行开发和测试,以确保镜像在Linux环境中正常运行。 总而言之,由于Windows和Linux的核心结构、系统调用和文件系统的差异,导致Windows打包的Docker镜像无法在Linux中运行,而需要使用适应Linux环境的构建工具和开发环境进行适配。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值