jianzhangbjz / learn-operator

This is an sample operator created by using the operator-sdk
13 stars 14 forks source link

Failed to build a docker image #3

Closed jianzhangbjz closed 2 years ago

jianzhangbjz commented 2 years ago

I create a Dockerfile, like this

mac:learn-operator jianzhang$ cat Dockerfile 
ARG LAST_STAGE_REPO=quay.io/openshifttest
ARG LAST_STAGE_BASE=base-alpine:multiarch
MAINTAINER jiazha@redhat.com

FROM golang:1.17 as build
COPY . /app
WORKDIR /app
RUN go build -mod=vendor -o "/app/build/bin/learn-operator" "/app/cmd/manager/main.go"

FROM ${LAST_STAGE_REPO}/${LAST_STAGE_BASE}
ENV OPERATOR=/usr/local/bin/learn-operator \
    USER_UID=1001 \
    USER_NAME=learn-operator

COPY --from=build  /app/build/bin /usr/local/bin
RUN /usr/local/bin/user_setup
RUN /usr/local/bin/learn-operator --help
ENTRYPOINT ["/usr/local/bin/entrypoint"]

USER ${USER_UID}

But, it failed, errors:

mac:learn-operator jianzhang$ docker build --no-cache --tag quay.io/olmqe/learn-operator:v1 .
[+] Building 115.1s (13/13) FINISHED                                                                                                           
 => [internal] load build definition from Dockerfile                                                                                      0.0s
 => => transferring dockerfile: 586B                                                                                                      0.0s
 => [internal] load .dockerignore                                                                                                         0.0s
 => => transferring context: 2B                                                                                                           0.0s
 => [internal] load metadata for quay.io/openshifttest/base-alpine:multiarch                                                              1.1s
 => [internal] load metadata for docker.io/library/golang:1.17                                                                            0.0s
 => [internal] load build context                                                                                                         0.3s
 => => transferring context: 194.48kB                                                                                                     0.2s
 => CACHED [stage-1 1/4] FROM quay.io/openshifttest/base-alpine:multiarch@sha256:0b379877aba876774e0043ea5ba41b0c574825ab910d32b43c05926  0.0s
 => CACHED [build 1/4] FROM docker.io/library/golang:1.17                                                                                 0.0s
 => [build 2/4] COPY . /app                                                                                                               1.1s
 => [build 3/4] WORKDIR /app                                                                                                              0.0s
 => [build 4/4] RUN go build -mod=vendor -o "/app/build/bin/learn-operator" "/app/cmd/manager/main.go"                                  111.2s
 => [stage-1 2/4] COPY --from=build  /app/build/bin /usr/local/bin                                                                        0.2s
 => [stage-1 3/4] RUN /usr/local/bin/user_setup                                                                                           0.4s
 => ERROR [stage-1 4/4] RUN /usr/local/bin/learn-operator --help                                                                          0.4s
------                                                                                                                                         
 > [stage-1 4/4] RUN /usr/local/bin/learn-operator --help:
#13 0.356 /bin/sh: /usr/local/bin/learn-operator: not found
------
executor failed running [/bin/sh -c /usr/local/bin/learn-operator --help]: exit code: 127
jianzhangbjz commented 2 years ago

/assign @jianzhangbjz

jianzhangbjz commented 2 years ago
mac:~ jianzhang$ docker version
Client:
 Cloud integration: v1.0.22
 Version:           20.10.13
 API version:       1.41
 Go version:        go1.16.15
 Git commit:        a224086
 Built:             Thu Mar 10 14:08:44 2022
 OS/Arch:           darwin/amd64
 Context:           default
 Experimental:      true

Server: Docker Desktop 4.6.1 (76265)
 Engine:
  Version:          20.10.13
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.15
  Git commit:       906f57f
  Built:            Thu Mar 10 14:06:05 2022
  OS/Arch:          linux/amd64
  Experimental:     true
 containerd:
  Version:          1.5.10
  GitCommit:        2a1d4dbdb2a1030dc5b01e96fb110a9d9f150ecc
 runc:
  Version:          1.0.3
  GitCommit:        v1.0.3-0-gf46b6ba
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
bandrade commented 2 years ago

@jianzhangbjz worked for me


docker version                                                                     
Client: Docker Engine - Community
 Version:           20.10.14
 API version:       1.41
 Go version:        go1.16.15
 Git commit:        a224086
 Built:             Thu Mar 24 01:48:32 2022
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.14
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.15
  Git commit:       87a90dc
  Built:            Thu Mar 24 01:46:20 2022
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.5.11
  GitCommit:        3df54a852345ae127d1fa3092b95168e4a88e2f8
 runc:
  Version:          1.0.3
  GitCommit:        v1.0.3-0-gf46b6ba
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

make build                                                                                                                                                                                                                            
mkdir -p "build/_output/bin"
export GO111MODULE=on && export GOPROXY=https://goproxy.io && go build -mod=vendor -o "build/_output/bin/learn-operator" "./cmd/manager/main.go"
mkdir -p "/tmp" && cp "build/_output/bin/learn-operator" "/tmp/learn-operator" && cp -r "build/bin" "/tmp/bin"

 docker build -f build/Dockerfile --no-cache --tag quay.io/olmqe/learn-operator:v1 .
Sending build context to Docker daemon  65.33MB
Step 1/7 : FROM registry.access.redhat.com/ubi8/ubi-minimal:latest
 ---> a0c247bdbd39
Step 2/7 : ENV OPERATOR=/usr/local/bin/learn-operator     USER_UID=1001     USER_NAME=learn-operator
 ---> Running in de7bdbc18318
Removing intermediate container de7bdbc18318
 ---> 535be2436ec2
Step 3/7 : COPY build/_output/bin/learn-operator ${OPERATOR}
 ---> ed890c8a8b4a
Step 4/7 : COPY build/bin /usr/local/bin
 ---> 548cf03b14a4
Step 5/7 : RUN  /usr/local/bin/user_setup
 ---> Running in 46003432554f
+ mkdir -p /root
+ chown 1001:0 /root
+ chmod ug+rwx /root
+ chmod g+rw /etc/passwd
+ rm /usr/local/bin/user_setup
Removing intermediate container 46003432554f
 ---> 68ee2368d611
Step 6/7 : ENTRYPOINT ["/usr/local/bin/entrypoint"]
 ---> Running in 8c7f1e4acc4f
Removing intermediate container 8c7f1e4acc4f
 ---> e62a18e23d0e
Step 7/7 : USER ${USER_UID}
 ---> Running in c25e9468173e
Removing intermediate container c25e9468173e
 ---> 29400a287fb7
Successfully built 29400a287fb7
Successfully tagged quay.io/olmqe/learn-operator:v1
jianzhangbjz commented 2 years ago

Hi @bandrade, thanks! But, I didn't use that build/Dockerfile file, I used a new Dockerfile described at the PR, as follows,

mac:learn-operator jianzhang$ cat Dockerfile 
ARG LAST_STAGE_REPO=quay.io/openshifttest
ARG LAST_STAGE_BASE=base-alpine:multiarch
MAINTAINER jiazha@redhat.com

FROM golang:1.17 as build
COPY . /app
WORKDIR /app
RUN go build -mod=vendor -o "/app/build/bin/learn-operator" "/app/cmd/manager/main.go"

FROM ${LAST_STAGE_REPO}/${LAST_STAGE_BASE}
ENV OPERATOR=/usr/local/bin/learn-operator \
    USER_UID=1001 \
    USER_NAME=learn-operator

COPY --from=build  /app/build/bin /usr/local/bin
RUN /usr/local/bin/user_setup
RUN /usr/local/bin/learn-operator --help
ENTRYPOINT ["/usr/local/bin/entrypoint"]

USER ${USER_UID}
jianzhangbjz commented 2 years ago

Addressed it by replacing the base image quay.io/openshifttest/base-alpine:multiarch with registry.access.redhat.com/ubi8/ubi-minimal:latest. /close

openshift-ci[bot] commented 2 years ago

@jianzhangbjz: Closing this issue.

In response to [this](https://github.com/jianzhangbjz/learn-operator/issues/3#issuecomment-1084437039): >Addressed it by replacing the base image `quay.io/openshifttest/base-alpine:multiarch ` with `registry.access.redhat.com/ubi8/ubi-minimal:latest`. >/close Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md). If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository.