我创建了一个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
?
答案 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/
并建立。