![](/img/trans.png)
[英]MacOS: How to mount volumes using docker-compose.yml and Dockerfile?
[英]Dockerfile with docker-compose.yml
总的来说,我确实了解使用 Dockerfile 和 docker-compose.yml 背后的目的。 但是,我在同时使用两者时遇到了一些问题。 很可能,我只是没有正确指定所有位置。
我构建了一个将 config.ini 文件作为输入之一的应用程序(它应该与我的 app.py 代码位于同一目录中)。 我的目标是避免每次更改配置文件时都重新构建映像。 我知道我可以通过构建映像然后通过 docker-compose.yml 运行/重新启动容器来做到这一点。
下面是我的项目的结构:
my_local_dir_with_py_projects/
|__config.ini
|__docker-compose.yml
|__my_py_app/
|__app.py
|__requirements.txt
|__Dockerfile
我的 Dockerfile 看起来像这样:
# syntax=docker/dockerfile:1
FROM python:3.10
WORKDIR app/
COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
COPY . .
我的 docker-compose.yml 看起来像这样:
version: '2.4'
services:
py_app:
image: py_app:latest
restart: always
volumes:
- "./config.ini:/Users/my_user/my_local_dir_with_py_projects/config.ini:z"
ports:
- "5005:5000"
command: python3 app.py
我已经通过docker build --tag py-app .
在/Users/my_user/my_local_dir_with_py_projects/py_app
。 然后我cd /Users/my_user/my_local_dir_with_py_projects/
并通过 docker docker-compose -f docker-compose.yml up
运行我的.yml
文件。
谢谢您的帮助。
编辑:只是为了澄清这个问题。 我收到以下错误:
py_app_1 | Traceback (most recent call last):
py_app_1 | File "/usr/local/lib/python3.10/configparser.py", line 790, in get
py_app_1 | value = d[option]
File "/usr/local/lib/python3.10/collections/__init__.py", line 986, in __getitem__
py_app_1 | return self.__missing__(key) # support subclasses that define __missing__
py_app_1 | File "/usr/local/lib/python3.10/collections/__init__.py", line 978, in __missing__
py_app_1 | raise KeyError(key)
py_app_1 | KeyError: 'base_url'
...
我的 config.ini 文件的一部分:
[DEFAULT]
base_url = https://api.binance.com
klines_url = /api/v1/klines
我正在阅读:
import configparser
config = configparser.ConfigParser()
config.read('config.ini')
在 Dockerfile 中,您将应用程序安装到/app
中。 您的 Compose 设置将配置文件挂载到/Users/...
目录中,但您的应用程序对此目录一无所知; 它在/app
内运行,可能正在那里寻找config.ini
文件。
所以在你docker-compose.yml
文件中,这一行:
volumes:
- ./config.ini:/app/config.ini
# ^^^^
需要匹配 Dockerfile 中的这一行:
WORKDIR /app
# ^^^^
(正如我所展示的,在 Dockerfile 中使用绝对路径可能更清楚。在 Dockerfile 中放置CMD
比依赖command:
覆盖显示在docker-compose.yml
文件中。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.