V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yunshangzhou
V2EX  ›  程序员

dockerfile 换成个人阿里云 acr 源,服务端部署出错

  •  
  •   yunshangzhou · 71 天前 · 1299 次点击
    这是一个创建于 71 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在迁移镜像源之前,线上部署没问题。

    dockerfile 做了这样的改动

    # FROM nginx:latest as prod-stage
    FROM registry.cn-hangzhou.aliyuncs.com/my_hub/nginx:latest
    

    改动后,线上部署失败,容器报错 exec user process caused: exec format err

    一开始以为是镜像本身问题,但是本地运行是跑通状态的。 于是改回:

    #FROM nginx:latest as prod-stage
    # FROM registry.cn-hangzhou.aliyuncs.com/my_hub/nginx:latest
    

    服务端再部署,正常运行。

    是服务端 docker 哪儿没有配置好吗?关键是本地也没怎么配置..

    第 1 条附言  ·  71 天前
    谢谢大家指引,阻挠我排查的原因大概是机制问题:
    docker build --platform 这块,估计只能针对官方镜像。比如本地拉了 Arm 架构的 nginx ,但是构建时指定 amd64,因此 docker 会去拉 amd64 架构镜像。而打了 tag 的私有源则识别不出,因此不生效。
    20 条回复
    jiangzm
        1
    jiangzm  
       71 天前
    是不是仓库权限问题
    onichandame
        2
    onichandame  
       71 天前
    国内镜像源已经全面陷落。个人项目直接翻墙,企业项目部署到香港或者买个海外专线
    90xchun
        3
    90xchun  
       71 天前 via iPhone
    应该是最近改的,即使你配置的公开仓库,直接拉是拉不动的,需要登录后就正常 pull 镜像了
    Curtion
        4
    Curtion  
       71 天前
    我现在部署程序都是 docker save 和 docker load 了,太惨了
    JensenQian
        5
    JensenQian  
       71 天前
    要么挂代理
    要么自己反代下
    完毕
    yunshangzhou
        6
    yunshangzhou  
    OP
       71 天前
    @90xchun 服务端能拉镜像,只是容器无法运行。个人仓库公开的,不需要登也能 pull
    90xchun
        7
    90xchun  
       71 天前 via iPhone
    @yunshangzhou 那服务是和本地一样的环境吗?你本地要啊是 mac 或者是 Windows ,而你服务器是 linux ,那是无法运行的
    yanghanlin
        8
    yanghanlin  
       71 天前 via Android   ❤️ 1
    是不是服务器和本地架构不一样导致的呢?官方的 Nginx 镜像应该支持多平台所以没问题,自己做镜像时可能忽略了其他平台
    yanghanlin
        9
    yanghanlin  
       71 天前 via Android
    @yanghanlin 比如本地是 Mac ( ARM ),服务器是 x86 ,自己镜像时可能只是 docker pull/push 了下,没有复制全部平台的镜像
    swq1227
        10
    swq1227  
       71 天前   ❤️ 1
    #8 应该是正解,可以使用
    ```bash
    docker buildx build --platform=linux/amd64,linux/arm64 .
    ```
    指定 platform
    yunshangzhou
        11
    yunshangzhou  
    OP
       71 天前
    @yanghanlin
    @swq1227 给官方镜像打 tag 传到 acr 不可以么?
    yanghanlin
        12
    yanghanlin  
       71 天前
    @yunshangzhou #11 用 docker pull/push 如何正确复制镜像我暂时也不太清楚呢,推荐一下操作镜像的专用工具 skopeo https://github.com/containers/skopeo
    sagaxu
        13
    sagaxu  
       71 天前
    运行错误信息呢?
    swq1227
        14
    swq1227  
       71 天前
    @yunshangzhou 一样的道理,例如你本地是 MAC M1, 那么你 pull 下来的镜像就是 arm 的,你重新打的 tag 也是给这个 arm 的镜像打的 tag ,push 到 acr 就只有 arm
    JayZXu
        15
    JayZXu  
       71 天前
    我这边一直用的阿里云的个人 docker 仓库跑流水线的,是正常的。应该是上面说到的架构问题
    Baymaxbowen
        16
    Baymaxbowen  
       71 天前
    找赛博菩萨帮你反代一下
    yunshangzhou
        17
    yunshangzhou  
    OP
       71 天前
    @swq1227 嗯,我想应该是这个了,我以为是多架构复合型镜像
    anonydmer
        18
    anonydmer  
       71 天前
    exec format err 这个就是典型的架构不匹配的错误提示
    guanzhangzhang
        19
    guanzhangzhang  
       71 天前
    exec format err 这个就是典型的架构不匹配的错误提示
    而在没使用 qemu-user-static 和配合 docker buildx 指定 platform 下,默认都是使用机器的架构构建的
    支持 manifest list 的镜像下,你 pull 没指定 platform 下默认是按照机器架构拉取,例如 nginx:alpine 你在 arm64 架构上拉取就是拉 arm64 的镜像,amd64 就是 amd64 架构
    yunshangzhou
        20
    yunshangzhou  
    OP
       71 天前
    @guanzhangzhang 我糊涂了,早应该想到这个
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5913 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 02:22 · PVG 10:22 · LAX 19:22 · JFK 22:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.