Dockerfile: добавленные файлы не будут скопированы на том - PullRequest
0 голосов
/ 13 октября 2019

Я создал Dockerfile для скрипта Python, который требует постоянных данных в томе. Проблема в том, что файлы для тома не будут размещены в контейнере.

Dockerfile:

FROM python:3

COPY grab_immo /grab_immo

RUN mkdir /data

ADD ./data/contacts /data
ADD ./data/run.log /data
ADD ./data/template /data

VOLUME /data

WORKDIR /grab_immo

RUN pip install -r requirements.txt

ENV MY_ADDRESS=value \
    PASSWORD=value \
    SMTP_HOST=value \
    SMTP_PORT=value 

CMD [ "python", "./main.py" ]

docker-compose.yml

---
version: "2"
services:
  grab_immo:
    build: .
    image: yyy/grab_immo
    container_name: grab_immo
    environment:
    - MY_ADDRESS = ''
    - PASSWORD = 
    - SMTP_HOST = 
    - SMTP_PORT = 587
    volumes:
      - /home/yyy/grab_immo_config:/data
    restart: unless-stopped

, поэтому явключил это в файл python для устранения неполадок:

print(os.path.isfile('/data/contacts') )    
print(os.path.isdir('/data'))

docker-compose up дает мне следующее:

grab_immo    | False   //print(os.path.isfile('/data/contacts') )
grab_immo    | True    //print(os.path.isdir('/data'))
grab_immo    | /grab_immo/main.py
grab_immo    | Traceback (most recent call last):
grab_immo    |   File "./main.py", line 248, in <module>
grab_immo    |     main()
grab_immo    |   File "./main.py", line 206, in main
grab_immo    |     sendmail('asdf', 'asdf', 'asdfk', 'deskldf')
grab_immo    |   File "./main.py", line 84, in sendmail
grab_immo    |     names, emails = get_contacts(newPath + 'contacts') # read contacts
grab_immo    |   File "./main.py", line 122, in get_contacts
grab_immo    |     with open(filename, mode='r', encoding='utf-8') as contacts_file:
grab_immo    | FileNotFoundError: [Errno 2] No such file or directory: '/data/contacts'
grab_immo exited with code 1

проверка докера:

"Mounts": [
            {
                "Type": "bind",
                "Source": "/home/yyy/grab_immo_config",
                "Destination": "/data",
                "Mode": "rw",
                "RW": true,
                "Propagation": ""
            },

Я создалдиректории на хост-машине, но там никогда не было файла.

Образ был создан на машине Win10, и я пытаюсь запустить его на сервере Ubuntu-VM.

также язаменил команды ADD на COPY, попытался скопировать весь каталог и так далее.

Поскольку os.path.isdir имеет значение true, я подозреваю, что монтирование каталога работает. Но как-то ожидаемых файлов там нет ...

Спасибо за любые предложения

1 Ответ

0 голосов
/ 14 октября 2019

Тома монтируются после запуска контейнера. Вам необходимо добавить данные в том после его создания или добавить в существующую папку и связать их с контейнером.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...