Docker容器运行CMD命令三种不同的方式,为什么?

我已经设置了我的 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 aux 输出):


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 干净?


慕田峪4524236
浏览 142回答 1
1回答

烙印99

(没有查看您正在运行的命令的详细信息)我怀疑该prodigy命令本身会产生一个新的 shell / 子命令。从进程列表中,PID 1是 Docker 作为容器主进程运行的进程;其他进程是第一个进程的子进程,由主进程启动。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python