Докер не сохраняет вывод в файл

Первоначально выложил по теме это. После ответа csv сохранялся в указанном каталоге. Теперь он создаст новый каталог (/ data), но csv там нет. Я не уверен, почему это больше не работает. Без докера скрипт python работает по назначению.

Команды, которые я выполняю:

docker build -t dock ./search_api
docker run -v ~/twitter-data/data:/app/ dock

И получаем следующий вывод:

Downloaded 220 tweets, Saved to /search/tweets.csv

Вот Dockerfile

# Use an official Python runtime as a parent image
FROM python:3.6-slim

# Set the working directory to /app
WORKDIR /search

# Copy the current directory contents into the container at /app
ADD . /search

# Install any needed packages specified in requirements.txt
RUN pip install --trusted-host pypi.python.org -r requirements.txt

# Run app.py when the container launches
CMD ["python", "search.py"]

Search.py ​​добавляется в tweets.csv

0
0
1 059
2

Ответы 2

Ваша привязка к неправильному каталогу в контейнере. Если вы получаете вывод Saved to /search/tweets.csv, вам нужно привязать монтируемый каталог к ​​/search, а не к app.

На данный момент вы сопоставляете каталог /app внутри контейнера с вашим хост-компьютером, который, как я полагаю, пуст даже внутри контейнера.

Чтобы решить вашу проблему, просто измените команду запуска докера на:

$ docker run -v ~/twitter-data/data:/search/ dock

При присвоении имени файла app.py и последующего использования в Dockerfile всего как / app я получаю следующую ошибку: python: не удается открыть файл app: [Errno 2] Нет такого файла или каталога. Это то, что заставило меня перейти на / search и search.py.

Seth 13.09.2018 19:43

Оставьте файл с именем search.py, а также все, что указано в исходном вопросе. Измените команду docker run только на то, что я указал выше, я думаю, это должно решить вашу проблему.

Jack Gore 13.09.2018 19:47

Я думал так же, но он просто возвращает python: невозможно открыть файл 'search': [Errno 2] Нет такого файла или каталога

Seth 13.09.2018 19:52

Я думаю, вы могли изменить что-то еще в своем Dockerfile. Предложенное мной изменение не должно иметь никакого отношения к Python. Если Python смог открыть каталог до моего изменения, он все равно сможет это сделать и после.

Jack Gore 13.09.2018 20:02

Все делается так, как заявлено. Я нашел этот github.com/docker/compose/issues/1616, но я не использую виртуальную машину, поэтому не уверен, применимо ли оно.

Seth 13.09.2018 20:11

Хорошо, потому что том был ~/twitter-data/data, но search.py / app.py находился в каталоге search_api. Спасибо за помощь, извините, я не предоставил всю информацию.

twitter-data
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── __pycache__
│   └── config.cpython-36.pyc
├── ci
│   └── build-images.sh
├── data
│   └── tweets.csv
├── images
│   └── test
│       └── Dockerfile
└── search_api
    ├── Dockerfile
    ├── __pycache__
    │   └── config.cpython-36.pyc
    ├── app.py
    ├── config.py
    └── requirements.txt

Другие вопросы по теме