首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用码头建筑烘焙代替码头-拼装?

如何用码头建筑烘焙代替码头-拼装?
EN

Stack Overflow用户
提问于 2021-12-16 20:40:45
回答 2查看 498关注 0票数 0

因此,我有一个与其他机器工作良好的对接命令,但是由于我的是M1芯片,所以我有问题。我想使用buildxbake来运行多个体系结构的坞容器。这是命令,

代码语言:javascript
复制
PY_VER=xxxx IMAGE=xxxx DISTRO=xxxxx \
PHARUS_VERSION=$(cat xxxxx/xxxx/xxxxx | tail -1 | awk -F\' '{print $2}') \
DJLABBOOK_VERSION=$(cat package.json | grep \"version\" | awk -F\" '{print $4}') \
HOST_UID=$(id -u) \
docker-compose -f docker-compose-dev.yaml up

我有一个Dockerfile并设置了所有的东西,但是这不适用于我的M1机器。

每当我运行这个命令时,-f env.hcl应用程序-f docker-bake.hcl就会得到这个输出。

代码语言:javascript
复制
 => [internal] load build definition from Dockerfile                                                                            0.1s
 => => transferring dockerfile: 32B                                                                                             0.1s
 => [internal] load .dockerignore                                                                                               0.0s
 => => transferring context: 34B                                                                                                0.0s
 => [internal] load metadata for docker.io/library/node:lts-buster-slim                                                         0.4s
 => [internal] load metadata for docker.io/library/golang:alpine3.11                                                            0.4s
 => [stage-1  1/11] FROM docker.io/library/node:lts-buster-slim@sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxx 0.0s
 => [internal] load build context                                                                                               0.0s
 => => transferring context: 4.47kB                                                                                             0.0s
 => [go_tmp 1/3] FROM docker.io/library/golang:alpine3.11@sha256:xxxxxxxxxxxxxxx  0.0s
 => https://raw.githubusercontent.com/datajoint/miniconda3-docker/master/utilities/startup.go                                   0.1s
 => CACHED [stage-1  2/11] RUN apt-get update && apt-get install wget -y                                                        0.0s
 => CACHED [stage-1  3/11] WORKDIR /home/node                                                                                   0.0s
 => CACHED [stage-1  4/11] COPY --chown=node:node ./package.json ./package-lock.json  /home/node/                               0.0s
 => CACHED [stage-1  5/11] RUN npm install                                                                                      0.0s
 => CACHED [go_tmp 2/3] ADD https://raw.githubusercontent.com/datajoint/miniconda3-docker/master/utilities/startup.go /startup  0.0s
 => CACHED [go_tmp 3/3] RUN cd / && go build startup.go                                                                         0.0s
 => CACHED [stage-1  6/11] COPY --from=go_tmp /startup /startup                                                                 0.0s
 => CACHED [stage-1  7/11] COPY ./docker-entrypoint.sh /docker-entrypoint.sh                                                    0.0s
 => CACHED [stage-1  8/11] RUN   chmod +x /docker-entrypoint.sh &&   chmod 4755 /startup                                        0.0s
 => CACHED [stage-1  9/11] COPY --chown=node:node ./tsconfig.json /home/node/                                                   0.0s
 => CACHED [stage-1 10/11] COPY --chown=node:node ./public  /home/node/public                                                   0.0s
 => CACHED [stage-1 11/11] COPY --chown=node:node ./src  /home/node/src                                                         0.0s
 => exporting to image                                                                                                          0.0s
 => => exporting layers                                                                                                         0.0s
 => => writing image sha256:xxxxxxxxxxxxxxxxx                                    0.0s

这是我的env.hcl文件的内容

代码语言:javascript
复制
PY_VER="3.8"

IMAGE="djbase"

DISTRO="alpine"

PHARUS_VERSION="$(cat pharus/pharus/version.py | tail -1 | awk -F\" '{print $2}')"

DJLABBOOK_VERSION="$(cat package.json | grep \"version\" | awk -F\" '{print $4}')"

HOST_UID="$(id -u)"

和我的码头-bake.hcl的内容

代码语言:javascript
复制
variable "PY_VER" {
    default = "xxx"
}

variable "IMAGE" {
    default = "xxx"
}

variable "DISTRO" {
    default = "xxxxx"
}

variable "PHARUS_VERSION" {
    default = "$(cat xxxx/xxxx/xxxxn.py | tail -1 | awk -F\" '{print $2}')"
}

variable "DJLABBOOK_VERSION" {
    default = "$(cat package.json | grep \"version\" | awk -F\" '{print $4}')"
}

variable "HOST_UID" {
    default = "$(id -u)"
}

target "app" {
    args = {
        PY_VER = "${PY_VER}"
        HOST_UID = "${HOST_UID}"
    }
}
EN

回答 2

Stack Overflow用户

发布于 2022-07-12 04:24:48

buildx bake不是用来代替compose up的,而是用来构建码头图像的。因此,它更类似于docker compose build或者仅仅是docker build。您想要使用buildx的地方是为了为多个体系结构构建映像。

您的M1芯片存在的问题很可能是,您的对接映像不打算在该体系结构(linux/arm64)上运行,因为它可能是为x86 (linux/amd64)构建的。

确保您已经安装了Rosetta 2,并且您的系统应该能够模拟x86并运行您的映像。检查一下这里的医生们想要更多

不过,在码头下运行模拟图像是缓慢的。因此,我一直在做的是使用bulidx为多个体系结构构建映像,然后您可以使用docker组合来提取这些映像。

代码语言:javascript
复制
# docker-bake.hcl
variable "platforms" {
  default = ["linux/amd64", "linux/arm64"]
}

group "default" {
  targets = [
    "my_image",
  ]
}

target "my_image" {
  dockerfile = "myimage.Dockerfile"
  tags = ["myrepo/myimage:latest"]
  platforms = platforms
}
代码语言:javascript
复制
# Command
docker build bake --push
代码语言:javascript
复制
# docker-compose.yml
version: '3.9'
services:
    dev:
        image: myrepo/myimage:latest

现在,您将有一个码头映像为两个架构和码头将自动选择正确的一个取决于它正在运行的系统。

您可能需要配置buildx,查看码头多拱博士以获得更多信息。

票数 1
EN

Stack Overflow用户

发布于 2022-08-26 15:01:05

  1. 使用buildxbake构建映像。
  2. --load参数或--push分别放在您的案例后面。

如果使用单一体系结构,只需使用docker-compose downdocker-compose up --force-recreate或其他命令,就可以使用最新构建的映像。

在多平台的情况下,您必须从远程存储库中提取对接者映像,并将其组合起来。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70385356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档