为什么CMD永远不能在我的Dockerfiles中工作?

时间:2016-11-05 20:59:51

标签: django docker dockerfile

我有一些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

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

1 个答案:

答案 0 :(得分:1)

ENTRYPOINTCMD定义了docker在启动容器时运行的默认命令,而不是在构建映像时。如果未定义ENTRYPOINT,则只需运行CMD的值即可。否则,CMD将成为ENTRYPOINT的参数。运行映像时,可以通过在容器名称后面传递args来覆盖CMD的值。

因此,在上面的示例中,CMD可能被定义为任何内容,但是当您使用docker run -it <imagename> /bin/bash运行容器时,您将覆盖CMD的任何值并将其替换为/ bin / bash的。要运行定义的CMD值,您需要使用docker run <imagename>运行容器。