jr00n
jr00n

Reputation: 471

Alpine Linux install package without internet (docker)

I'm trying to build a Docker image with Alpine and only need to install some packages (apk add) but without internet because our dev environment allows no internet connection. So I COPY the apk's in /temp and try to install from there. Like is written in the docs add local package But still it tries to get to the internet to fetch an index... I don't want that. Is that possible?

FROM alpine:3.8
COPY ./apk/* /tmp/
RUN apk add --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 yes, this image is available on DockerHub, but we need to build it ourselves)

Upvotes: 10

Views: 20830

Answers (2)

Alex O'Connor
Alex O'Connor

Reputation: 152

As per the documentation on wiki.alpinelinux.org, you can simply use apk add --allow-untrusted /path/to/file.apk, and if you want multiple packages, apk add --allow-untrusted /path/to/file.apk /path/to/file_2.apk

Upvotes: 0

nickgryg
nickgryg

Reputation: 28633

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

Upvotes: 12

Related Questions