【问题标题】:How to run docker image on local server如何在本地服务器上运行 docker 镜像
【发布时间】:2022-01-10 02:07:31
【问题描述】:

我是 Docker 的新手,我需要运行一个已经由另一个开发人员编写的 dokcerized django 项目,这是 Dockerfile.dev:

FROM python:alpine
RUN apk update \
    && apk add --virtual build-deps gcc python3-dev musl-dev \
    && apk add postgresql-dev \
    && apk add jpeg-dev zlib-dev libjpeg
ENV PYTHONUNBUFFERED 1

WORKDIR /app
COPY requirements.txt /tmp/
RUN pip install --requirement /tmp/requirements.txt
COPY entrypoint.sh /app/
ENTRYPOINT [ "./entrypoint.sh" ]
EXPOSE 8000
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

和 dcoker-compose.yml :

services:
    event:
        build:
            context: .
            dockerfile: Dockerfile.dev
        volumes:
            - ./:/app
        
        env_file:
          - ./envs/development.env
        

        command:
            bash -c "python manage.py makemigrations && python manage.py migrate && python manage.py runserver 0.0.0.0:8000"
        ports:
          - "8000:8000"
        
        depends_on:
          - event-database


    event-database:
        image: postgres:alpine

        env_file:
            - ./envs/development.db.env

networks:
    default:
        name: mizban

当我使用 docker build --tag 创建映像,然后使用 docker run imageid 运行它时,它不会运行 CMD 部分以在 0.0.0.0:8000 端口上运行项目有什么建议吗?

【问题讨论】:

  • 您正在运行的实际命令是什么;除了图像 ID,docker run 还有其他选项吗?您是在使用您显示的 Compose 设置,还是只是运行普通的 docker 命令?当你说“它不运行CMD”时,是什么导致你得出这个结论?
  • 你试过docker-compose up -d吗,这个命令读取compose文件,会构建docker镜像。不需要做 docker build 和 docker run。
  • @DavidMaze 是的,我在 Docker run 中使用图像 ID 对不起我的英文不好

标签: django docker


【解决方案1】:

entrypoint 始终优先于 command。您的文件Dockerfile.dev 包含ENTRYPOINTCMD。在这种情况下,CMD 用作ENTRYPOINT 的参数。

因此,如果您只想运行 command 而不是 entrypoint,则需要在 docker-compose.yml 文件中使用空字符串覆盖 entrypoint 部分。

参考下面的例子。

services:
    event:
        build:
            context: .
            dockerfile: Dockerfile.dev
        volumes:
            - ./:/app
        
        env_file:
          - ./envs/development.env
        
        entrypoint: ""
        command:
            bash -c "python manage.py makemigrations && python manage.py migrate && python manage.py runserver 0.0.0.0:8000"
        ports: ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-06
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 2017-04-01
    • 2022-10-15
    • 1970-01-01
    • 2019-10-08
    相关资源
    最近更新 更多