docker-compose:Dockerfile 成功复制文件但在容器上找不到

问题描述 投票:0回答:1

docker-compose
构建容器时,Dockerfile 没有错误并有效复制文件,但在构建镜像后 docker-compose 使用
command: ls -la /app
并且该文件不存在。

这是设置:

docker-compose.yml

version: '3.8'

services:
  web:
    build:
      context: .
      dockerfile: Dockerfile
    command: ls -la /app
    volumes:
      - ./ecommerce:/app
    ports:
      - "8000:8000"
    depends_on:
      - redis
      - rabbitmq
    environment:
      - DEBUG=${DEBUG}
      - DJANGO_SECRET_KEY=${DJANGO_SECRET_KEY}
      - DJANGO_ALLOWED_HOSTS=${DJANGO_ALLOWED_HOSTS}
      - DEVELOPMENT_MODE=${DEVELOPMENT_MODE}
      - STRIPE_PUBLISHABLE_KEY=${STRIPE_PUBLISHABLE_KEY}
      - STRIPE_SECRET_KEY=${STRIPE_SECRET_KEY}
      - STRIPE_WEBHOOK_SECRET=${STRIPE_WEBHOOK_SECRET}
      - REDIS_HOST=redis
      - CELERY_BROKER_URL=amqp://guest:guest@rabbitmq:5672//

  redis:
    image: redis:alpine
    
  rabbitmq:
    image: rabbitmq:3-management
    ports:
      - "5672:5672"
      - "15672:15672"
    environment:
      RABBITMQ_DEFAULT_USER: guest
      RABBITMQ_DEFAULT_PASS: guest

Dockerfile

# Use the official Python image from the Docker Hub
FROM python:3.9-slim

# Set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1


# Set the working directory
WORKDIR /app

# Install system dependencies
RUN apt-get update && apt-get install -y \
    build-essential \
    libpq-dev \
    libpango1.0-0 \
    libcairo2 \
    libgdk-pixbuf2.0-0 \
    libffi-dev \
    shared-mime-info \
    && rm -rf /var/lib/apt/lists/*

# Install Python dependencies
COPY requirements.txt /app
RUN pip install --upgrade pip
RUN pip install -r requirements.txt


# Copy the entrypoint script into the container
COPY ./entry/entrypoint.sh /app  <--- this runs OK but it not listed in the container
RUN chmod +x /app/entrypoint.sh


# Copy the Django project code into the container
COPY ./ecommerce /app

# Collect static files
RUN python manage.py collectstatic --noinput
docker docker-compose
1个回答
0
投票

您的撰写文件有

volumes:
  - ./ecommerce:/app

这会使用主机系统上存在的任何内容覆盖映像中的

/app
目录。

也就是说:在镜像代码上挂载本地内容会重新引入 Docker 通常试图避免的“在我的机器上运行”问题。 如果您碰巧在本地签出了源代码,这将起作用,但现在如果您要部署它,则永远不会运行映像中内置的内容。

如果删除此卷挂载,那么您将运行映像中实际内置的内容。 一般来说,这是一个更具可重复性的设置。 您可以使用基于主机的工具(您的 MacOS 或 Linux 主机甚至预装了 Python)进行日常开发,并使用完整的容器设置进行集成测试和部署。

© www.soinside.com 2019 - 2024. All rights reserved.