Docker 容器以三种不同的方式运行 CMD 命令,为什么?
Docker container runs CMD command three different ways, why?
我已经设置了我的 Dockerfile,它看起来像这样:
FROM python:3.6
ARG label
ARG seeds
ARG dataset_name=${label}_terms
RUN mkdir /prodigy
WORKDIR /prodigy
COPY ./prodigy-1.8.1-cp35.cp36.cp37-cp35m.cp36m.cp37m-linux_x86_64.whl /prodigy
RUN pip install prodigy-1.8.1-cp35.cp36.cp37-cp35m.cp36m.cp37m-linux_x86_64.whl
RUN pip install -U spacy
RUN python -m spacy download en_core_web_lg
EXPOSE 8080
RUN mkdir /work
ENV PRODIGY_HOME /work
WORKDIR /work
COPY ./prodigy.json /work
RUN prodigy dataset ${dataset_name}
ENV LABEL=${label}
ENV SEEDS=${seeds}
CMD prodigy terms.teach ${LABEL}_terms en_core_web_lg --seed "$SEEDS"
有效,但不如预期。它应该 运行 CMD 命令一次。相反,它以 3 种不同的方式进行(ps 辅助输出):
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 4280 692 ? Ss 08:47 0:00 /bin/sh -c prodigy terms.teach ${LABEL}_terms en_core_web_lg --seed "$SEEDS"
root 8 0.0 0.0 4280 740 ? S 08:47 0:00 /bin/sh /usr/local/bin/prodigy terms.teach TRANSFER_terms en_core_web_lg --seed transfer, relocation, relegation
root 9 46.1 13.7 2329976 1687016 ? Sl 08:47 15:13 python -m prodigy terms.teach TRANSFER_terms en_core_web_lg --seed transfer, relocation, relegation
我想知道这是什么标准行为?我怎样才能使我的 Dockerfile 干净?
(如果不查看命令的详细信息,您会 运行ning)我怀疑 prodigy
命令本身会产生一个新的 shell / 子命令。
从进程列表中,PID 1
是运行被Docker作为容器主进程的进程;其他进程是第一个进程的子进程,由主进程启动。
我已经设置了我的 Dockerfile,它看起来像这样:
FROM python:3.6
ARG label
ARG seeds
ARG dataset_name=${label}_terms
RUN mkdir /prodigy
WORKDIR /prodigy
COPY ./prodigy-1.8.1-cp35.cp36.cp37-cp35m.cp36m.cp37m-linux_x86_64.whl /prodigy
RUN pip install prodigy-1.8.1-cp35.cp36.cp37-cp35m.cp36m.cp37m-linux_x86_64.whl
RUN pip install -U spacy
RUN python -m spacy download en_core_web_lg
EXPOSE 8080
RUN mkdir /work
ENV PRODIGY_HOME /work
WORKDIR /work
COPY ./prodigy.json /work
RUN prodigy dataset ${dataset_name}
ENV LABEL=${label}
ENV SEEDS=${seeds}
CMD prodigy terms.teach ${LABEL}_terms en_core_web_lg --seed "$SEEDS"
有效,但不如预期。它应该 运行 CMD 命令一次。相反,它以 3 种不同的方式进行(ps 辅助输出):
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 4280 692 ? Ss 08:47 0:00 /bin/sh -c prodigy terms.teach ${LABEL}_terms en_core_web_lg --seed "$SEEDS"
root 8 0.0 0.0 4280 740 ? S 08:47 0:00 /bin/sh /usr/local/bin/prodigy terms.teach TRANSFER_terms en_core_web_lg --seed transfer, relocation, relegation
root 9 46.1 13.7 2329976 1687016 ? Sl 08:47 15:13 python -m prodigy terms.teach TRANSFER_terms en_core_web_lg --seed transfer, relocation, relegation
我想知道这是什么标准行为?我怎样才能使我的 Dockerfile 干净?
(如果不查看命令的详细信息,您会 运行ning)我怀疑 prodigy
命令本身会产生一个新的 shell / 子命令。
从进程列表中,PID 1
是运行被Docker作为容器主进程的进程;其他进程是第一个进程的子进程,由主进程启动。