我需要Dockerfile构建一个基于 Alpine Linux 的 Docker 镜像。现在我需要安装一个包作为这个的一部分Dockerfile。
目前我有:
RUN apk update && \
apk upgrade && \
apk add git
Run Code Online (Sandbox Code Playgroud)
显然这是一个坏主意,因为结果是不确定的。相反,它取决于我构建映像的时间点,以及git正在安装的版本。
这样做的正确方法是什么?
我想我必须告诉updated,upgrade以及add使用哪些版本,但我该怎么做?
我已经看到apk支持固定存储库,但这不是我想要的(至少我是这么认为的),因为我不想固定存储库,而是一个包。
换句话说:如果git可以通过安装npm,我将能够运行:
npm install git@1.9.2
Run Code Online (Sandbox Code Playgroud)
(或我想要的任何版本)。对于 Alpine Linux,这相当于什么?
所以我无法在 alpine linux 中安装 npm。我想也许我可以只做一个apk add npm但显然apk search npm什么都不返回,即使在apk update. 我正在从 nginx:alpine docker 图像中尝试所有这些,即docker run -it nginx:alpine /bin/sh
编辑 1:我可以看到nodejs:alpine dockerfile 是如何构建的node,但我不明白它是如何构建的npm
编辑 2:现在我知道 npm 在 alpine 上与 nodejs 一起安装,只是为了澄清起见,起初这对我来说并不明显的原因是在 ubuntu 14.04 上 asudo apt-get install nodejs仍然需要一个sudo apt-get install npm(例如安装开发包gcc)
我注意到我的 Python 应用程序在运行时比在 Ubuntu 上不使用 Docker时运行要慢得多python:2-alpine3.6。我想出了两个小的基准测试命令,当我在 Ubuntu 服务器上运行它们时,以及当我在 Mac 上使用 Docker 时,两种操作系统之间都存在明显的差异。
$ BENCHMARK="import timeit; print(timeit.timeit('import json; json.dumps(list(range(10000)))', number=5000))"
$ docker run python:2-alpine3.6 python -c $BENCHMARK
7.6094589233
$ docker run python:2-slim python -c $BENCHMARK
4.3410820961
$ docker run python:3-alpine3.6 python -c $BENCHMARK
7.0276606959
$ docker run python:3-slim python -c $BENCHMARK
5.6621271420
Run Code Online (Sandbox Code Playgroud)
我还尝试了以下不使用 Python 的“基准”:
$ docker run -ti ubuntu bash
root@6b633e9197cc:/# time $(i=0; while (( i < 9999999 )); do (( i ++
)); done)
real …Run Code Online (Sandbox Code Playgroud) 如何在 Unix 服务器上检查安装了哪个版本的 Alpine 邮件客户端?
如果需要,我有 root 访问权限。
这怎么可能?
bash: /usr/local/phantomjs/bin/phantomjs: No such file or directory
bash-4.3# cd /usr/local/phantomjs/bin
bash-4.3# ls
phantomjs
bash-4.3#
Run Code Online (Sandbox Code Playgroud)
内容/usr/local/phantomjs/bin是phantomjs文件,但是当我尝试执行它时,它看起来不存在。
仅供参考,我使用的是 Alpine linux 3.3
更新1
bash-4.3# ls -lF /usr/local/phantomjs/bin/phantomjs
-rwxr-xr-x 1 root root 67932064 Jan 25 2016 /usr/local/phantomjs/bin/phantomjs*
bash-4.3# lf -lF /usr/local/phantomjs/bin
bash: lf: command not found
bash-4.3# ls -lF /usr/local/phantomjs/bin
total 66340
-rwxr-xr-x 1 root root 67932064 Jan 25 2016 phantomjs*
Run Code Online (Sandbox Code Playgroud)
更新2
bash-4.3# file /usr/local/phantomjs/bin/phantomjs
bash: file: command not found
bash-4.3# head -n1 /usr/local/phantomjs/bin/phantomjs
ELF>xvA@`?
Q?t/lib64/ld-linux-x86-64.so.2GNUGNU????!?`?L`?L^|????????h?TT@T@DD`??`?L`?P?tddB?dB?dB??g
Run Code Online (Sandbox Code Playgroud)
更新3
bash-4.3# echo …Run Code Online (Sandbox Code Playgroud) 我正在构建一个 Docker 容器,我需要将我的用户添加到一个组中。usermod默认情况下在 Alpine Linux 中不可用。显然,您可以添加shadowfromapk到 install usermod,但我不希望安装其他软件包。
是否有其他方法可以将用户添加到组中,或usermod在 Alpine 中使用等效工具?
好吧,我已经设置了一个带有 nginx 的 alpine linux docker 容器
( apk add nginx)
现在我正在尝试运行 nginx。使用简单命令nginx返回以下错误:
nginx: [emerg] open() "/run/nginx/nginx.pid" failed (2: No such file or directory)
Run Code Online (Sandbox Code Playgroud)
这是什么原因造成的?- 即使作为 root 我也没有打开的权限,/run/所以我无法真正检查出来。我的 nginx.conf 是:
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
#include /etc/nginx/mime.types;
#default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 alpine linux 3.5 上安装 whereis 命令
实际上我正在运行以下命令:
apk add --update whereis
Run Code Online (Sandbox Code Playgroud)
但它不起作用,因为我收到此错误:
fetch http://dl-cdn.alpinelinux.org/alpine/v3.5/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.5/community/x86_64/APKINDEX.tar.gz
ERROR: unsatisfiable constraints:
whereis (missing):
required by: world[whereis]
Run Code Online (Sandbox Code Playgroud)
似乎没有包 whereis,我肯定错过了什么。我应该怎么做才能获得 whereis 命令?
我正在尝试获取已安装软件包的列表,其版本采用易于处理的格式,以便自动化工具进行解析。
我可以得到这个输出:
/ # apk list -i
WARNING: Ignoring APKINDEX.00740ba1.tar.gz: No such file or directory
WARNING: Ignoring APKINDEX.d8b2a6f4.tar.gz: No such file or directory
musl-1.1.22-r2 x86_64 {musl} (MIT) [installed]
zlib-1.2.11-r1 x86_64 {zlib} (zlib) [installed]
apk-tools-2.10.4-r2 x86_64 {apk-tools} (GPL2) [installed]
musl-utils-1.1.22-r2 x86_64 {musl} (MIT BSD GPL2+) [installed]
libssl1.1-1.1.1c-r0 x86_64 {openssl} (OpenSSL) [installed]
alpine-baselayout-3.1.2-r0 x86_64 {alpine-baselayout} (GPL-2.0-only) [installed]
alpine-keys-2.1-r2 x86_64 {alpine-keys} (MIT) [installed]
busybox-1.30.1-r2 x86_64 {busybox} (GPL-2.0) [installed]
scanelf-1.2.3-r0 x86_64 {pax-utils} (GPL-2.0) [installed]
libc-utils-0.7.1-r0 x86_64 {libc-dev} (BSD) [installed]
libtls-standalone-2.9.1-r0 x86_64 {libtls-standalone} (ISC) [installed] …Run Code Online (Sandbox Code Playgroud) 我正在尝试基于 alpine linux 构建我自己的 docker 容器,我需要在该容器中添加多个服务(是的,不建议将其作为最佳实践,但目前我的 org devops 有点落后,需要一个 dockerfile 用于我的自定义图像)。
我正在查看这篇文章以找到在 alpine linux 上使用 npm 安装最新版本的 nodejs 的方法。但是apk add nodejs@6,本次讨论中似乎没有提供或提供类似的内容。
此外,似乎 alpine linux 在此处的存储库中没有最新版本的 nodejs (v 8.X) 。
那么我几乎必须从源代码安装 nodejs 吗?但是与仅从 alpine repo 安装相比,该选项非常慢。
编辑:
在 dockerfile 中添加 nodejs-current 会带来另一个问题
步骤 ... : RUN apk update && apk add nodejs-current
---> 在 e430b4d279e5 中运行获取http://dl-cdn.alpinelinux.org/alpine/v3.4/main/x86_64/APKINDEX.tar.gz 获取 http://dl-cdn.alpinelinux.org/alpine/ v3.4/community/x86_64/APKINDEX.tar.gz 获取 http://nl.alpinelinux.org/alpine/edge/testing/x86_64/APKINDEX.tar.gz v3.4.6-213-gb6db4bd [ http://dl -cdn.alpinelinux.org/alpine/v3.4/main] v3.4.6-160-g14ad2a3 [ http://dl-cdn.alpinelinux.org/alpine/v3.4/community] v3.6.0-3765-g46dd4472f4 [ http://nl.alpinelinux.org/alpine/edge/testing] OK:8679 个不同的包可用错误:无法满足的约束:nodejs-current(缺失):需要:world[nodejs-current]
alpine-linux ×10
docker ×3
linux ×2
packages ×2
command-line ×1
nginx ×1
node.js ×1
performance ×1
ubuntu ×1
unix ×1
user-groups ×1
version ×1