我有一些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中,所以我不能得到一些东西
答案 0 :(得分:1)
ENTRYPOINT
和CMD
定义了docker在启动容器时运行的默认命令,而不是在构建映像时。如果未定义ENTRYPOINT
,则只需运行CMD
的值即可。否则,CMD
将成为ENTRYPOINT
的参数。运行映像时,可以通过在容器名称后面传递args来覆盖CMD
的值。
因此,在上面的示例中,CMD
可能被定义为任何内容,但是当您使用docker run -it <imagename> /bin/bash
运行容器时,您将覆盖CMD
的任何值并将其替换为/ bin / bash的。要运行定义的CMD
值,您需要使用docker run <imagename>
运行容器。