如何在docker alpine容器/ busybox中将gdate映射到日期?

时间:2018-03-23 16:14:31

标签: docker busybox alpine

我创建了一个Centos7 docker容器,用于检查某些证书的到期日期。

FROM centos:7

RUN yum -q -y install openssl && \
  ln -s /usr/bin/date /bin/gdate

证书的检查是由在macos上开发的shell脚本完成的。因此,我需要将gdate映射到date,因为gdate仅适用于macos而非centos。

这个容器相当庞大,大约200MB。我已经尝试了alpine图片并在那里映射gdate

FROM alpine

RUN apk update && \
  apk add --no-cache openssl && \
  rm -rf /var/cache/apk/* && \
  ln -s /bin/date /bin/gdate

在高山容器内进行测试时,我得到:

/ # gdate
gdate: applet not found

如何在docker alpine容器/ busybox中将gdate映射到date

1 个答案:

答案 0 :(得分:1)

创建符号链接的方式在busybox中不起作用。如果你在容器中运行ls -l /bin,你会看到一些奇怪的东西,如:

lrwxrwxrwx    1 root     root            12 Jan  9 19:37 ash -> /bin/busybox
lrwxrwxrwx    1 root     root            12 Jan  9 19:37 base64 -> /bin/busybox
lrwxrwxrwx    1 root     root            12 Jan  9 19:37 bbconfig -> /bin/busybox
-rwxr-xr-x    1 root     root        805024 Dec 12 10:42 busybox
lrwxrwxrwx    1 root     root            12 Jan  9 19:37 cat -> /bin/busybox
lrwxrwxrwx    1 root     root            12 Jan  9 19:37 chgrp -> /bin/busybox
...

/bin/busybox之外的每个文件本身都是指向文件/bin/busybox的符号链接。

您可以看到文件busybox是某种命令多路复用器。当您运行date命令时,您实际上正在运行busybox date

要将gdate映射到date,请创建一个名为gdate的shell脚本,其中包含以下内容:

#!/bin/sh
busybox date

并使其可执行。然后在你的Dockerfile中,COPY它到图像:

FROM alpine

RUN apk update && \
apk add --no-cache openssl && \
rm -rf /var/cache/apk/*

COPY gdate /bin/

并建立。