我对 Docker 很陌生,我正在尝试 Dockerize 一个难以在不同平台上运行的特定工具。出于某种原因,ENTRYPOINT 和 CMD 命令没有像我预期的那样工作。
令我困惑的是,当我从容器内部运行脚本时,脚本可以工作,但是当我运行我认为传递运行时参数的完全相同的东西时,我得到的响应与脚本完全不同。我希望他们是一样的。
这是我的 Dockerfile
FROM ubuntu:latest
RUN apt-get -y update
RUN apt-get -y install build-essential flex bison
COPY . /unicornscan
WORKDIR /unicornscan
RUN patch src/unilib/tsc.c patches/unicornscan-0.4.7-gcc5.patch
RUN ./configure CFLAGS=-D_GNU_SOURCE --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-bundled-ltdl
RUN make
RUN make install
ENTRYPOINT ["/usr/bin/unicornscan"]
CMD []
当我从 dockerfile 中删除入口点和 cmd 然后运行:
docker run -it test/image:1.0 sh
我在容器里。然后我运行:
/bin/sh -c "unicornscan -I -msf 22.22.22.22:a"
它开始告诉我在 IP 22.22.22.22 上打开了哪些端口,这是这个工具应该做的。
现在,我添加入口点和 cmd 命令,重新构建,然后运行
docker run test/image:1.0 -I -msf 22.22.22.22:a
现在我从工具中得到这个输出:
Send exiting ack, parent died?: system error No such file or directory
每次我重复这个过程都会发生同样的事情,所以我的问题是,为什么?这两个命令有什么区别。我的印象是它们完全一样。