当我们使用Docker时,它在我们https://hub.docker.com
的公共存储库中非常容易推送和提取图像,但是这个存储库只对公共图像免费(只有一个可以是私有的)。
目前可以在存储库中执行公共映像的逆向工程并读取项目的源代码吗?
答案 0 :(得分:6)
答案 1 :(得分:5)
正如yamenk所说docker history
是关键。
由于https://github.com/CenturyLinkLabs/dockerfile-from-image已损坏,您可以使用最近的
https://hub.docker.com/r/dduvnjak/dockerfile-from-image/
从网站提取
请注意,该脚本仅适用于本地图像中存在的图像 存储库(您键入docker图像时看到的内容)。如果你想 为本地仓库中不存在的图像生成Dockerfile 你首先需要停靠者拉它。
例如,您可以再次运行它,以查看代码
$ docker run --rm -v /run/docker.sock:/run/docker.sock centurylink/dockerfile-from-image ruby
FROM buildpack-deps:latest
RUN useradd -g users user
RUN apt-get update && apt-get install -y bison procps
RUN apt-get update && apt-get install -y ruby
ADD dir:03090a5fdc5feb8b4f1d6a69214c37b5f6d653f5185cddb6bf7fd71e6ded561c in /usr/src/ruby
WORKDIR /usr/src/ruby
RUN chown -R user:users .
USER user
RUN autoconf && ./configure --disable-install-doc
RUN make -j"$(nproc)"
RUN make check
USER root
RUN apt-get purge -y ruby
RUN make install
RUN echo 'gem: --no-rdoc --no-ri' >> /.gemrc
RUN gem install bundler
ONBUILD ADD . /usr/src/app
ONBUILD WORKDIR /usr/src/app
ONBUILD RUN [ ! -e Gemfile ] || bundle install --system
答案 2 :(得分:1)
您可以使用 laniksj / dfimage 来对图像进行反向工程。
例如:
# docker run -v /var/run/docker.sock:/var/run/docker.sock laniksj/dfimage <YOUR_IMAGE_ID>
FROM node:12.4.0-alpine
RUN /bin/sh -c apk update
RUN /bin/sh -c apk -Uuv add groff less python py-pip
RUN /bin/sh -c pip install awscli
RUN /bin/sh -c apk --purge -v del py-pip
RUN /bin/sh -c rm /var/cache/apk/*
RUN /bin/sh -c apk add --no-cache curl
ADD dir:4afc740ff29e4a32a34617d2715e5e5dc8740f357254bc6d3f9362bb04af0253 in /app
COPY file:b57abdb61ae72f3a25be67f719b95275da348f9dfb63fb4ff67410a595ae1dfd in /usr/local/bin/
WORKDIR /app
RUN /bin/sh -c npm install
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["node" "app.js"]