Yes, it is possible. It is some kind of hack :) Alpine package manager (apk
) always needs a repository to index from, when it installs packages (apk add
). But it is possible to provide it an empty list of repositories and define it during the install command (apk add --repositories-file=
).
Dockerfile
is:
FROM alpine:3.8
COPY ./apk/* /tmp/
RUN touch repo.list && apk add --repositories-file=repo.list --allow-untrusted --no-network --no-cache /tmp/ca-certificates-20171114-r3.apk /tmp/libcurl-7.61.1-r1.apk /tmp/libssh2-1.8.0-r3.apk /tmp/nghttp2-libs-1.32.0-r0.apk /tmp/curl-7.61.1-r1.apk
ENTRYPOINT ["/usr/bin/curl"]
And we get:
$ docker build . --no-cache
Sending build context to Docker daemon 663kB
Step 1/4 : FROM alpine:3.8
---> 11cd0b38bc3c
Step 2/4 : COPY ./apk/* /tmp/
---> 31248015db45
Step 3/4 : RUN touch repo.list && apk add --repositories-file=repo.list --allow-untrusted --no-network --no-cache /tmp/ca-certificates-20171114-r3.apk /tmp/libcurl-7.61.1-r1.apk /tmp/libssh2-1.8.0-r3.apk /tmp/nghttp2-libs-1.32.0-r0.apk /tmp/curl-7.61.1-r1.apk
---> Running in b8d214219e03
(1/5) Installing ca-certificates (20171114-r3)
(2/5) Installing nghttp2-libs (1.32.0-r0)
(3/5) Installing libssh2 (1.8.0-r3)
(4/5) Installing libcurl (7.61.1-r1)
(5/5) Installing curl (7.61.1-r1)
Executing busybox-1.28.4-r0.trigger
Executing ca-certificates-20171114-r3.trigger
OK: 6 MiB in 18 packages
Removing intermediate container b8d214219e03
---> 3e36700c3641
Step 4/4 : ENTRYPOINT ["/usr/bin/curl"]
---> Running in 32abd512c88e
Removing intermediate container 32abd512c88e
---> bd915c91c7ec
Successfully built bd915c91c7ec
apk add --repositories-file=/dev/null
– Sporophyll