我对 Docker 相当陌生。我正在从基本图像创建一个新图像。我正在使用以下 Dockerfile。我打开了基础镜像 Dockerfile 并复制了 CMD。进行了修改,并在尝试运行新创建的映像时进行了修改。容器启动,但执行的命令显示为 "kamailio -DD -E /bin/sh -c '["kamailio" "-DD" "-E"]'"。我怎样才能让输入命令只是“kamailio -DD -E”?我已将 Entrypoint 更改为 CMD,但没有运气。我错过了什么?如果它与基本图像相同,我是否还需要 CMD 命令?
FROM kamailio/kamailio:5.2.8-stretch
WORKDIR ./
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5060
ENTRYPOINT ["kamailio -DD -E"]
答案 0 :(得分:0)
您的 ENTRYPOINT 语法错误。语法应该是:
ENTRYPOINT ["kamilio", "-DD", "-E"]
这样,Docker 将在没有 shell 帮助的情况下执行此命令。
当 CMD
或 ENTRYPOINT
使用字符串语法时,它们会被包裹在 sh -c 中,因此您必须使用 JSON 语法来避免它。 JSON 语法采用 ["your_program", "param1", "param2", "...", "param n"]
的形式。我想如果你像你那样做你的入口点,Docker 会将它解析为字符串语法,因此它会被 sh-c 包裹。
此外,当您在 Dockerfile 中一起使用 ENTRYPOINT
和 CMD
时,它们应始终采用 JSON 格式。
编辑:您可以在此处阅读有关此主题的更多信息 https://container.training/intro-selfpaced.yml.html#191
EDIT2:我总是通过以下方式通过 docker-compose 构建我的图像:
someContainer:
build:
context: ./folderContainingDockerFile
dockerfile: ./Dockerfile
ports:
- "outside:5060"
# also try adding your entrypoint through docker-compose file like that:
entrypoint: ["kamilio", "-DD", "-E"]