Docker: Unable to execute RUN command after ADD when starting from scratch - docker

I'm trying to build a custom Linux Alpine docker for ARM architecture starting from the "scratch" image. I don't understand why I can't execute any RUN command after I execute ADD. This is my Dockerfile:
FROM scratch
ADD rootfs.tar /
MAINTAINER Vittorio_Cozzolino
RUN apk add nodejs
And this is the output that I get when the automated build completes (the last line contains the error):
Client: Version: 1.8.1 API version: 1.20 Go version:
go1.4.2 Git commit: d12ea79 Built: Thu Aug 13 02:49:29 UTC
2015 OS/Arch: linux/amd64
Server: Version: 1.8.3-rc1 API version: 1.20 Go version:
go1.4.2 Git commit: 6f21aba Built: Mon Sep 28 20:03:03 UTC
2015 OS/Arch: linux/amd64 Step 0 : FROM scratch
---> Step 1 : ADD rootfs.tar /
---> dd771ffd56ea702 Step 2 : MAINTAINER Vittorio_Cozzolino
---> 825fc4c990c8a33 Step 3 : RUN apk add nodejs [91mexec: "/bin/sh": stat /bin/sh: no such file or directory
Actually /bin/sh exists and, in fact, if I run CMD ["/bin/sh"] I don't get any error. Can anyone help me here?

CMD ["/bin/sh"] is a simple declaration of the default command to run, so it will always work.
Check if the tar is indeed unpacked, as there was a similar issue in 9541: limit your Dockerfile to the ADD directive, and use docker exec or a simple ls to see what is in there (and with which owner/permission).
If the Dockerfile complains about a missing /bin/sh, and /bin/sh is in the tar archive... chances are that archive didn't uncompress properly.

Related

How to build docker image, using a dockerfile from stdin with shell varaibles

I try to build a docker image with Jenkins, using here docuemnt. Part of the The shell:
# Docker image build.
mkdir -p "$BASE_PATH/.docker"
cd "$BASE_PATH/.docker"
echo "docker version: "
docker version
docker login --username=****** --password ****** ******
docker build -t "******/$DOCKER_IMAGE" -f- . <<EOF
FROM ******
ARG NGINX_CONF_FILE=$NGINX_CONF_FILE
ENV DEPLOY_PATH=$DEPLOY_PATH
ENV NGINX_CONF_DIR=$NGINX_CONF_DIR
RUN mkdir -p \$DEPLOY_PATH \\
&& chmod 777 "\$DEPLOY_PATH"
WORKDIR \$DEPLOY_PATH
ADD customer customer/
ADD mall mall/
ADD marketing marketing/
ADD portal portal/
ADD setup setup/
ADD store store/
ADD work work/
WORKDIR \$NGINX_CONF_DIR
COPY ./\$NGINX_CONF_FILE .
EXPOSE 8000
EOF
When running it with bash, Jenkins complains:
docker version:
Client:
Version: 17.03.1-ce
API version: 1.27
Go version: go1.7.5
Git commit: 0801b25
Built: Tue Mar 28 08:29:28 2017
OS/Arch: linux/amd64
Server:
Version: 17.03.1-ce
API version: 1.27 (minimum version 1.12)
Go version: go1.7.5
Git commit: 0801b25
Built: Tue Mar 28 08:29:28 2017
OS/Arch: linux/amd64
Experimental: false
Login Succeeded
unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat /var/jenkins_home/workspace/docker-test-scrmv3/.docker/-: no such file or directory
Build step 'Execute shell' marked build as failure
New run name is '#17 ver:0.0.17'
Finished: FAILURE
Looks like docker treat the hyphen (-) as a directory not stdin. Accroding to the offical recommand this should work but dont know how. Any way to fix it?
Docker should be above 17.05. The document not metion it.

Passing argument to dockerfile not working well

I'm having some trouble with passing argument value to dockerfile.
Running docker in Windows Server 2016
My docker version info is
PS C:\Users\Administrator\Desktop> docker version
Client: Docker Engine - Enterprise
Version: 19.03.4
API version: 1.40
Go version: go1.12.10
Git commit: 9e27c76fe0
Built: 10/17/2019 23:42:50
OS/Arch: windows/amd64
Experimental: false
Server: Docker Engine - Enterprise
Engine:
Version: 19.03.4
API version: 1.40 (minimum version 1.24)
Go version: go1.12.10
Git commit: 9e27c76fe0
Built: 10/17/2019 23:41:23
OS/Arch: windows/amd64
Experimental: false
and powershell opened as administrator.
My reference is this.
But it not worked for me.
So this is my dockerfile.
FROM microsoft/iis
ARG a_version
RUN echo $a_version
Also i tried many different types of echo value
Such as
RUN echo "$a_version"
RUN echo ${a_version}
RUN echo "${a_version}"
And this is my execute command.
docker build . --build-arg a_version=1234
My expected result was print 1234
But actual result was
PS C:\Users\Administrator\Desktop> docker build . --build-arg a_version=1234
Sending build context to Docker daemon 14.04MB
Step 1/3 : FROM microsoft/iis
---> 595015675977
Step 2/3 : ARG a_version
---> Running in 91698d9e71da
Removing intermediate container 91698d9e71da
---> 2bad94a2ce74
Step 3/3 : RUN echo $a_version
---> Running in 3fe25ecb813c
$a_version
Why it happens? How can is fix it?
In Windows Command-Prompt the syntax is echo %a_version% as your
base image is based on window.
how-can-i-display-the-contents-of-an-environment-variable-from-the-command-promp
So you can change this to
FROM microsoft/iis
ARG a_version
RUN echo %a_version%
env in window dockerfile
I had to do something simmilar and this is a piece of code that worked for me.
ARG PORT_SITE
ENV PORT_SITE ${PORT_SITE}
and then I refer it in the entrypoint as following
$env:PORT_SITE
That's the way I did it, but i suppose that you can ommit the env variable and just refer to the arg value using
${PORT_SITE}

Unspecified error (0x80004005) while running a Docker build

Going thought the onboarding first steps of docker https://hub.docker.com/?overlay=onboarding , I run into an issue when running the build command
docker build -t <user>/cheers2019 .
The error happend at the 6th step, with code error (0x80004005). I am running docker on windows with windows containers.
The full error code:
Sending build context to Docker daemon 13.31kB
Step 1/9 : FROM golang:1.11-alpine AS builder
---> e116d2efa2ab
Step 2/9 : RUN apk add --no-cache git
---> Using cache
---> 07f79e350f69
Step 3/9 : RUN go get github.com/pdevine/go-asciisprite
---> Using cache
---> cfe4fd4064c3
Step 4/9 : WORKDIR /project
---> Using cache
---> 4ba87d64456e
Step 5/9 : COPY cheers.go .
---> Using cache
---> 486d7602dccf
Step 6/9 : RUN CGO_ENABLED=0 GOOS=linux go build -a -ldflags '-extldflags "-static"' -o cheers cheers.go
---> Running in b77dee3bd612
container b77dee3bd612319c299e077116fc68ccf7f166246f85138b0e1cc0e074c8cb2b encountered an error during CreateProcess: failure in a Windows system call: Unspecified error (0x80004005)
[Event Detail: failed to run runc create/exec call for container b77dee3bd612319c299e077116fc68ccf7f166246f85138b0e1cc0e074c8cb2b: exit status 1 Stack Trace:
github.com/Microsoft/opengcs/service/gcs/runtime/runc.(*container).startProcess
/go/src/github.com/Microsoft/opengcs/service/gcs/runtime/runc/runc.go:580
github.com/Microsoft/opengcs/service/gcs/runtime/runc.(*runcRuntime).runCreateCommand
/go/src/github.com/Microsoft/opengcs/service/gcs/runtime/runc/runc.go:471
github.com/Microsoft/opengcs/service/gcs/runtime/runc.(*runcRuntime).CreateContainer
/go/src/github.com/Microsoft/opengcs/service/gcs/runtime/runc/runc.go:113
github.com/Microsoft/opengcs/service/gcs/core/gcs.(*gcsCore).ExecProcess
/go/src/github.com/Microsoft/opengcs/service/gcs/core/gcs/gcs.go:351
github.com/Microsoft/opengcs/service/gcs/bridge.(*Bridge).execProcess
/go/src/github.com/Microsoft/opengcs/service/gcs/bridge/bridge.go:637
github.com/Microsoft/opengcs/service/gcs/bridge.(*Bridge).execProcess-fm
/go/src/github.com/Microsoft/opengcs/service/gcs/bridge/bridge.go:253
github.com/Microsoft/opengcs/service/gcs/bridge.HandlerFunc.ServeMsg
/go/src/github.com/Microsoft/opengcs/service/gcs/bridge/bridge.go:72
github.com/Microsoft/opengcs/service/gcs/bridge.(*Mux).ServeMsg
/go/src/github.com/Microsoft/opengcs/service/gcs/bridge/bridge.go:146
github.com/Microsoft/opengcs/service/gcs/bridge.(*Bridge).ListenAndServe.func2.1
/go/src/github.com/Microsoft/opengcs/service/gcs/bridge/bridge.go:335
runtime.goexit
/usr/lib/go/src/runtime/asm_amd64.s:1333 Provider: 00000000-0000-0000-0000-000000000000] extra info: {"CommandArgs":["/bin/sh","-c","CGO_ENABLED=0 GOOS=linux go build -a -ldflags '-extldflags \"-static\"' -o cheers cheers.go"],"WorkingDirectory":"/project","Environment":{"GOLANG_VERSION":"1.11.13","GOPATH":"/go","HOSTNAME":"b77dee3bd612","PATH":"/go/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"},"CreateStdInPipe":true,"CreateStdOutPipe":true,"CreateStdErrPipe":true,"ConsoleSize":[0,0],"OCISpecification":{"ociVersion":"1.0.1-dev","process":{"user":{"uid":0,"gid":0},"args":["/bin/sh","-c","CGO_ENABLED=0 GOOS=linux go build -a -ldflags '-extldflags \"-static\"' -o cheers cheers.go"],"env":["PATH=/go/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","HOSTNAME=b77dee3bd612","GOLANG_VERSION=1.11.13","GOPATH=/go"],"cwd":"/project","capabilities":{"bounding":["CAP_CHOWN","CAP_DAC_OVERRIDE","CAP_FSETID","CAP_FOWNER","CAP_MKNOD","CAP_NET_RAW","CAP_SETGID","CAP_SETUID","CAP_SETFCAP","CAP_SETPCAP","CAP_NET_BIND_SERVICE","CAP_SYS_CHROOT","CAP_KILL","CAP_AUDIT_WRITE"],"effective":["CAP_CHOWN","CAP_DAC_OVERRIDE","CAP_FSETID","CAP_FOWNER","CAP_MKNOD","CAP_NET_RAW","CAP_SETGID","CAP_SETUID","CAP_SETFCAP","CAP_SETPCAP","CAP_NET_BIND_SERVICE","CAP_SYS_CHROOT","CAP_KILL","CAP_AUDIT_WRITE"],"inheritable":["CAP_CHOWN","CAP_DAC_OVERRIDE","CAP_FSETID","CAP_FOWNER","CAP_MKNOD","CAP_NET_RAW","CAP_SETGID","CAP_SETUID","CAP_SETFCAP","CAP_SETPCAP","CAP_NET_BIND_SERVICE","CAP_SYS_CHROOT","CAP_KILL","CAP_AUDIT_WRITE"],"permitted":["CAP_CHOWN","CAP_DAC_OVERRIDE","CAP_FSETID","CAP_FOWNER","CAP_MKNOD","CAP_NET_RAW","CAP_SETGID","CAP_SETUID","CAP_SETFCAP","CAP_SETPCAP","CAP_NET_BIND_SERVICE","CAP_SYS_CHROOT","CAP_KILL","CAP_AUDIT_WRITE"]}},"root":{"path":"rootfs"},"hostname":"b77dee3bd612","mounts":[{"destination":"/proc","type":"proc","source":"proc","options":["nosuid","noexec","nodev"]},{"destination":"/dev","type":"tmpfs","source":"tmpfs","options":["nosuid","strictatime","mode=755","size=65536k"]},{"destination":"/dev/pts","type":"devpts","source":"devpts","options":["nosuid","noexec","newinstance","ptmxmode=0666","mode=0620","gid=5"]},{"destination":"/sys","type":"sysfs","source":"sysfs","options":["nosuid","noexec","nodev","ro"]},{"destination":"/sys/fs/cgroup","type":"cgroup","source":"cgroup","options":["ro","nosuid","noexec","nodev"]},{"destination":"/dev/mqueue","type":"mqueue","source":"mqueue","options":["nosuid","noexec","nodev"]},{"destination":"/dev/shm","type":"tmpfs","source":"shm","options":["nosuid","noexec","nodev","mode=1777"]}],"linux":{"resources":{},"namespaces":[{"type":"mount"},{"type":"network"},{"type":"uts"},{"type":"pid"},{"type":"ipc"}],"maskedPaths":["/proc/asound","/proc/acpi","/proc/kcore","/proc/keys","/proc/latency_stats","/proc/timer_list","/proc/timer_stats","/proc/sched_debug","/proc/scsi","/sys/firmware"],"readonlyPaths":["/proc/bus","/proc/fs","/proc/irq","/proc/sys","/proc/sysrq-trigger"]},"windows":{"layerFolders":["C:\\ProgramData\\Docker\\lcow\\072ca1f3855a32f3e3b24c2fe4ca8dea9853d4fb64207407094332a2d6541458","C:\\ProgramData\\Docker\\lcow\\c45071b2eff55610a9d9b3f430b8e5fa3ff65465e59b8d5a63a61e744ca94c48","C:\\ProgramData\\Docker\\lcow\\6890c90396b8fcd14669837530eef071ec5e3f10dda6724478c7ab1b58752307","C:\\ProgramData\\Docker\\lcow\\a1998eef0068aac5fb61f53e87ce8d6d46eaf5c83f7eab36cb745fb57ad72e8a","C:\\ProgramData\\Docker\\lcow\\f311f4698a5c1eb5e8800ef04c6066177112d76afc18d089fcf2cd5642712a01","C:\\ProgramData\\Docker\\lcow\\5e7e640cace36a63707967e7109604dacc800b8163eb04a4be7f346ff38ba867","C:\\ProgramData\\Docker\\lcow\\a2a8b17328e92e236a3d30841abed7b815188a3d63e2432272f772acda4ec75d","C:\\ProgramData\\Docker\\lcow\\d774068efa88052dab131c32c40832302f547dd4737738ca19873e0c3bed0074","C:\\ProgramData\\Docker\\lcow\\b433fd6793fe572e509619d719280574a3b1860dbcc647ec6629695666227ca5","C:\\ProgramData\\Docker\\lcow\\b77dee3bd612319c299e077116fc68ccf7f166246f85138b0e1cc0e074c8cb2b"],"hyperv":{},"network":{"endpointList":["0FFBAC8D-5E31-4C4F-A753-85C5148C437D"],"allowUnqualifiedDNSQuery":true}}}}
Any idea of how I should run my builds in docker ?
I encountered exactly the same error. I don' know if it comes from the fact that during installation I checked "only Windows containers", but it switched to Windows containers in Docker For Windows.
So the solution is to click switch to Linux container, then I clean all :
docker system prune
Then I run again:
docker build -t <user>/cheers2019 .
Now it works for me.
Here is my Docker version :
docker version
Client: Docker Engine - Community
Version: 19.03.5
API version: 1.40
Go version: go1.12.12
Git commit: 633a0ea
Built: Wed Nov 13 07:22:37 2019
OS/Arch: windows/amd64
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 19.03.5
API version: 1.40 (minimum version 1.12)
Go version: go1.12.12
Git commit: 633a0ea
Built: Wed Nov 13 07:29:19 2019
OS/Arch: linux/amd64
Experimental: true
containerd:
Version: v1.2.10
GitCommit: b34a5c8af56e510852c35414db4c1f4fa6172339
runc:
Version: 1.0.0-rc8+dev
GitCommit: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
docker-init:
Version: 0.18.0
GitCommit: fec3683
I have Trying to change the experimental.
Check : Docker version in Console if experimental is false in both Client and Server.
Then you can change in C:\Users\.docker
in config.json you change experimental":"enabled"
then in daemon.json you change "experimental": true
then after save I run again.
docker build -t <user>/cheers2019 .
On Windows 10 I was having the same problem reported in the current question and the following issue as well: NPM Install doesn't work in Docker.
To solve the issue I've combined both solutions:
#JPBlanc (Switch to Linux Containers)
#Muhammad (disable experimental on command line & configuration file)
How I did it:
1) Switch to Linux Containers: On taskbar, right click on docker icon and click on the option as presented bellow:
2) Disable "Experimental Features" on Command Line: Open docker/settings and click on Command Line:
3) Disable Experimental setting on configuration file:: On docker/settings, click on Docker Engine and certify that experimental is set to false:
Hope it helps.
Cheers
replace CRLF characters with LF for Windows in a tool like Notepad++ and rerun.

Docker container exits immediately in Linux Server

I have built an image with simple ASP .NET Core 2.0 App in Alpine Docker. When I run the Linux container on Windows Power-Shell, everything is fine. But if I run the Linux container on a Linux Server in PuTTY, the container will immediately exit with code 139. I have used the following conmmand:
docker run -it -d -p xxxx:80 imageName
output:
510e77c3899696823d4f1fba135cbaff3f8b4232deb1a73d41963fc3a8058d81
run without -d
Hosting environment: Production
Content root path: /app
Now listening on: http://[::]:80
Application started. Press Ctrl+C to shut down.
OS: Win 10
Docker Version:
Client:
Version: 17.12.1-ce
API version: 1.35
Go version: go1.9.4
Git commit: 7390fc6
Built: Tue Feb 27 22:15:20 2018
OS/Arch: linux/amd64
Server:
Engine:
Version: 17.12.1-ce
API version: 1.35 (minimum version 1.12)
Go version: go1.9.4
Git commit: 7390fc6
Built: Tue Feb 27 22:17:54 2018
OS/Arch: linux/amd64
Experimental: false
Is there a way to keep the container alive? Did I miss anything important? Any ideas would be appreciated!
Update Dockerfile:
#build image
FROM microsoft/dotnet:2.1-sdk as builder
WORKDIR /app
COPY *.csproj .
RUN dotnet restore
COPY . .
RUN dotnet publish --output /out/ --configuration Release
# runtime image
FROM microsoft/dotnet-nightly:2.1-runtime-alpine AS runtime
RUN apk add --no-cache libuv \
&& ln -s /usr/lib/libuv.so.1 /usr/lib/libuv.so
ENV ASPNETCORE_URLS http://+:80
WORKDIR /app
COPY --from=builder /out .
ENTRYPOINT ["dotnet", "WebAppHelloWorld.dll"]

Docker: Win container: The application to execute does not exist

I am trying to create my first docker image and container.
I follow documents / videos I found online.
On my Microsoft Windows 10 Pro - 10.0.16299 Build 16299 I can successfully build ASP.NET Core application after running command docker build -t web ..
But when I try to run image docker run -ti web, I get error:
The application to execute does not exist: 'C:\app\Web.dll'
Is there any command to list files? I want to check path and where (if) dll exists. I couldn't find such command on web.
Also any hint where to look for problem would be awesome. Also (if it helps) docker ps doesn't list anything.
Docker:
Client:
Version: 18.02.0-ce
API version: 1.36
Go version: go1.9.3
Git commit: fc4de44
Built: Wed Feb 7 21:12:53 2018
OS/Arch: windows/amd64
Experimental: false
Orchestrator: swarm
Server:
Engine:
Version: 18.02.0-ce
API version: 1.36 (minimum version 1.24)
Go version: go1.9.3
Git commit: fc4de44
Built: Wed Feb 7 21:26:24 2018
OS/Arch: windows/amd64
Experimental: true
Dockerfile:
# Stage 1
FROM microsoft/aspnetcore-build AS builder
WORKDIR /source
# caches restore result by copying csproj file separately
COPY Web.sln ./src/aspdocker/Web.sln
COPY Web.Library/Web.Library.csproj ./src/aspdocker/Web.Library/
COPY Web.Core/Web.Core.csproj ./src/aspdocker/Web.Core/
COPY Web.Hosting/Web.Hosting.csproj ./src/aspdocker/Web.Hosting/
COPY Web.Library.Tests/Web.Library.Tests.csproj ./src/aspdocker/Web.Library.Tests/
COPY Web.Core.Tests/Web.Core.Tests.csproj ./src/aspdocker/Web.Core.Tests/
# caches restore result by copying csproj file separately
RUN dotnet restore ./src/aspdocker/Web.sln
# copies the rest of your code
COPY . .
RUN dotnet publish --output /app/
# Stage 2
#FROM microsoft/aspnetcore:1.1.2
FROM microsoft/aspnetcore
WORKDIR /app
COPY --from=builder /app .
#EXPOSE 5000/tcp
ENTRYPOINT ["dotnet", "Web.dll"]

Resources