为什么CMD不能在我的Docker文件中工作?

我有几个Dockerfiles CMD似乎不运行。 这里是一个例子(一直在底部)。

########################################################## # Set the base image to Ansible FROM ubuntu:16.10 # Install Ansible, Python and Related Deps # RUN apt-get -y update && \ apt-get install -y python-yaml python-jinja2 python-httplib2 python-keyczar python-paramiko python-setuptools python-pkg-resources git python-pip RUN mkdir /etc/ansible/ RUN echo '[local]\nlocalhost\n' > /etc/ansible/hosts RUN mkdir /opt/ansible/ RUN git clone http://github.com/ansible/ansible.git /opt/ansible/ansible WORKDIR /opt/ansible/ansible RUN git submodule update --init ENV PATH /opt/ansible/ansible/bin:/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin ENV PYTHONPATH /opt/ansible/ansible/lib ENV ANSIBLE_LIBRARY /opt/ansible/ansible/library RUN apt-get update -y RUN apt-get install python -y RUN apt-get install python-dev -y RUN apt-get install python-setuptools -y RUN apt-get install python-pip RUN mkdir /ansible/ WORKDIR /ansible COPY ./ansible ./ WORKDIR / RUN ansible-playbook -c local ansible/playbooks/installdjango.yml ENV PROJECTNAME testwebsite ################## SETUP DIRECTORY STRUCTURE ###################### WORKDIR /home CMD ["django-admin" "startproject" "$PROJECTNAME"] EXPOSE 8000 

如果我构build并运行容器,我可以手动运行Django-admin startproject $ PROJECTNAME,它将按照预期创build一个新项目,但是我的Dockerfile中的CMD似乎没有做任何事情,而且所有其他Dockerfiles所以有一些我不能得到的东西。

ENTRYPOINTCMD定义了ENTRYPOINT在启动容器时运行的默认命令,而不是在图像生成时运行。 当没有定义ENTRYPOINT ,只需运行CMD的值即可。 否则, CMD会成为进入点的ENTRYPOINT 。 运行映像时,可以通过在容器名称后面传递args来覆盖CMD的值。

所以,在你上面的例子中, CMD可以被定义为任何东西,但是当你用docker run -it <imagename> /bin/bash运行你的容器时,你可以覆盖CMD任何值,并用/ bin / bash代替它。 要运行CMD的定义值,您需要使用docker run <imagename>运行容器。