В моем образе Docker установлена ​​локальная директория, но он не может прочитать файл из этого каталога - PullRequest
1 голос
/ 18 марта 2020

Я пытаюсь создать контейнер docker с изображениями MySql, Django и Apache. Я настроил этот docker -compose.yml ...

version: '3'

services:
  mysql:
    restart: always
    image: mysql:5.7
    environment:
      MYSQL_DATABASE: 'maps_data'
      # So you don't have to use root, but you can if you like
      MYSQL_USER: 'chicommons'
      # You can use whatever password you like
      MYSQL_PASSWORD: 'password'
      # Password for root access
      MYSQL_ROOT_PASSWORD: 'password'
    ports:
      - "3406:3306"
    volumes:
      - my-db:/var/lib/mysql
    command: ['mysqld', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci']

  web:
    restart: always
    build: ./web
    ports:           # to access the container from outside
      - "8000:8000"
    env_file: .env
    environment:
      DEBUG: 'true'
    command: /usr/local/bin/gunicorn maps.wsgi:application --reload -w 2 -b :8000
    volumes:
    - ./web/:/app
    depends_on:
      - mysql

  apache:
    restart: always
    build: ./apache/
    ports:
      - "9090:80"
    links:
      - web:web

volumes:
  my-db:

Я бы хотел смонтировать свой образ docker Django в каталог на моем локальном компьютере, чтобы можно было выполнять локальные изменения. отражено в контейнере docker, поэтому у меня есть это

volumes:
- ./web/:/app

в моей "паутине". Это веб / Dockerfile, который я использую ...

FROM python:3.7-slim

RUN apt-get update && apt-get install

RUN apt-get install -y libmariadb-dev-compat libmariadb-dev
RUN apt-get update \
    && apt-get install -y --no-install-recommends gcc \
    && rm -rf /var/lib/apt/lists/*

RUN python -m pip install --upgrade pip

WORKDIR /app/

COPY requirements.txt requirements.txt
RUN python -m pip install -r requirements.txt

RUN ["chmod", "+x", "/app/entrypoint.sh"]

ENTRYPOINT ["/app/entrypoint.sh"]

Однако, когда я запускаю вещи, используя "docker -compose up", я получаю эту ошибку ...

chmod: cannot access '/app/entrypoint.sh': No such file or directory

Даже когда я смотрю в свой локальный каталог, я вижу файл ...

localhost:maps davea$ ls -al web/entrypoint.sh 
-rw-r--r-- 1 davea staff 99 Mar  9 15:23 web/entrypoint.sh

Я чувствую, что не правильно сопоставил / смонтировал объекты, но не уверен, где проблема есть.

1 Ответ

2 голосов
/ 18 марта 2020

Кажется, что ваши docker-compose и Dockerfiles настроены правильно.

Однако я замечаю одну вещь: ваша точка входа ENTRYPOINT ["/app/entrypoint.sh"] выполняет файл /app/entrypoint.sh, который вы не делаете иметь разрешение на это в соответствии с командой ls -al

-rw-r--r-- 1 davea staff 99 Mar  9 15:23 web/entrypoint.sh

Для этого есть два простых решения:

  1. Предоставить разрешение на выполнение файла entrypoint.sh:
chmod a+x web/entrypoint.sh
Или, если вы не хотите давать это разрешение, вы можете обновить свою точку входа следующим образом: ENTRYPOINT ["bash", "/app/entrypoint.sh"]

Обратите внимание, что в любом случае это не проблема с вашим docker-compose монтируется, но ваш Dockerfile и, следовательно, вам нужно будет перестроить ваше docker изображение после внесения таких изменений, как

docker-compose up -d --build
...