私が建てたアルパインLinux中ドッカーコンテナ次のDockerfileを使用してください。
FROM alpine:3.2
RUN apk add --update jq curl && rm -rf /var/cache/apk/*
ビルドが正常に実行されます。
$ docker build -t collector .
Sending build context to Docker daemon 2.048 kB
Sending build context to Docker daemon
Step 0 : FROM alpine:3.2
3.2: Pulling from alpine
8697b6cc1f48: Already exists
alpine:3.2: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Digest: sha256:eb84cc74347e4d7c484d566dec8a5eef82bab1b78308b92cda559bcff29c27cc
Status: Downloaded newer image for alpine:3.2
---> 8697b6cc1f48
Step 1 : RUN apk add --update jq curl && rm -rf /var/cache/apk/*
---> Running in 888571296e79
fetch http://dl-4.alpinelinux.org/alpine/v3.2/main/x86_64/APKINDEX.tar.gz
(1/11) Installing run-parts (4.4-r0)
(2/11) Installing openssl (1.0.2a-r1)
(3/11) Installing lua5.2-libs (5.2.4-r0)
(4/11) Installing lua5.2 (5.2.4-r0)
(5/11) Installing ncurses-terminfo-base (5.9-r3)
(6/11) Installing ncurses-widec-libs (5.9-r3)
(7/11) Installing lua5.2-posix (33.3.1-r2)
(8/11) Installing ca-certificates (20141019-r2)
(9/11) Installing libssh2 (1.5.0-r0)
(10/11) Installing curl (7.42.1-r0)
(11/11) Installing jq (1.4-r0)
Executing busybox-1.23.2-r0.trigger
Executing ca-certificates-20141019-r2.trigger
OK: 9 MiB in 26 packages
---> 7625779b773d
Removing intermediate container 888571296e79
Successfully built 7625779b773d
とにかく、以下を実行するとdate -d
失敗します。
$ docker run -i -t collector sh
/ # date -d yesterday
date: invalid date 'yesterday'
/ # date -d now
date: invalid date 'now'
/ # date -d next-month
date: invalid date 'next-month'
残りのオプションはうまくいくようです。
/ # date
Sat May 30 18:57:24 UTC 2015
/ # date +"%A"
Saturday
/ # date +"%Y-%m-%dT%H:%M:%SZ"
2015-05-30T19:00:38Z
答え1
BusyBox / Alpineバージョンの日付は、-d
ヘルプがUbuntuバージョンと他のより大きなディストリビューションとまったく同じであってもオプションをサポートしません。
さらに、「コンテナ化」は何も残しません。
-d
オプションを使用するには、coreutils
パッケージを追加するだけです。
$ cat Dockerfile.alpine-coreutils
FROM alpine:3.2
RUN apk add --update coreutils && rm -rf /var/cache/apk/*
$ docker build -t alpine-coreutils - < Dockerfile.alpine-coreutils
Sending build context to Docker daemon 2.048 kB
Sending build context to Docker daemon
Step 0 : FROM alpine:3.2
3.2: Pulling from alpine
8697b6cc1f48: Already exists
alpine:3.2: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Digest: sha256:eb84cc74347e4d7c484d566dec8a5eef82bab1b78308b92cda559bcff29c27cc
Status: Downloaded newer image for alpine:3.2
---> 8697b6cc1f48
Step 1 : RUN apk add --update coreutils && rm -rf /var/cache/apk/*
---> Running in 694fa5cb271c
fetch http://dl-4.alpinelinux.org/alpine/v3.2/main/x86_64/APKINDEX.tar.gz
(1/3) Installing libattr (2.4.47-r3)
(2/3) Installing libacl (2.2.52-r2)
(3/3) Installing coreutils (8.23-r0)
Executing busybox-1.23.2-r0.trigger
OK: 12 MiB in 18 packages
---> a7d9116a00ee
Removing intermediate container 694fa5cb271c
Successfully built a7d9116a00ee
$ docker run -i -t alpine-coreutils sh
/ # date -d last-week
Sun May 24 09:19:34 UTC 2015
/ # date -d yesterday
Sat May 30 09:19:46 UTC 2015
/ # date
Sun May 31 09:19:50 UTC 2015
Debian 標準と比較して、画像サイズは倍増しますが、11.47 MB まではサイズが 1 段階小さくなります。
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
alpine-coreutils latest a7d9116a00ee 2 minutes ago 11.47 MB
alpine 3.2 8697b6cc1f48 2 days ago 5.242 MB
debian latest df2a0347c9d0 11 days ago 125.2 MB
ありがとう、Andy Zinn: https://github.com/gliderlabs/docker-alpine/issues/40#issuecomment-107122371
クリストファーホレル:https://github.com/docker-library/official-images/issues/771#issuecomment-107101595
答え2
busybox
date
( 's-D
に似ていますがGNUとは反対)すべての型(相対日付ではありません)で日付を解析するためのインタフェースを提供するオプションをサポートしています(ast-openと'sにはカスタム入力型メソッドもあります) 。zsh
strftime
date
strptime()
date
ksh93
printf
busybox
がCライブラリ実装用に構築され、strptime()
非標準strftime()
フラグをサポートしている場合は、%s
次のことができます。
date -D %s -d "$(($(date +%s) - 86400))"
ただし、Alpine Linuxで使用されているmusl Cライブラリはstrftime()
これをサポートしています%s
がstrptime()
、サポートしていません。ただし、date
GNUは日付仕様をdate
サポートしているため、ビジボックスは重要ではないので、@epochtime
次のようにすることができます。
date -d "@$(($(date +%s) - 86400))"
これはGNUのあいまいさなしで86400秒前の日付を提供しますdate
(yesterday
86400秒前でしたか、それとも昨日同じ時間でしたか?
この構文はGNUでも機能しますdate
。
ast-open date
(またはksh93 printf '%(%c)T'
)を使用すると、次のことができます。
date -d "#$(($(date +%s) - 86400))"
代わりに。
UTC(Zulu)時間を報告するには、UTC(Zulu)時間を使用する必要があります。TZ=UTC0 date
それ以外の場合は、date -u
システム/ユーザーのタイムゾーンに時間が表示されます。
答え3
編集:このコマンドはAlpine:3.2でテストされました。
現在の日付から24時間を減らすには、次の手順を実行します。
# date
Fri Jul 10 13:08:56 UTC 2020
# date -d "-24:00:00"
Thu Jul 9 00:00:00 UTC 2020
以下を使用して現在の日付に追加することもできます。
# date -d "+24:00:00"
Sat Jul 11 00:00:00 UTC 2020
役に立ったことを願って
答え4
タイムゾーン変換が必要な場合、coreutils
これだけでは不十分です。
あなたもそれが必要ですtzdata
。
このようなコマンドはTZ='America/Los_Angeles' date
効果がなく、TZ
varは無視されます。
その後、タイムゾーン変換が正しく機能し始めます。apk add tzdata