Nas*_*dhi 5 docker docker-compose
我目前处于项目的根目录中。
我的目标是尝试使用以下命令在 docker 容器中运行我的前端 (front.py) 和后端 (API.py)
sudo docker-compose -f project/docker/docker-compose.yml up -d
Run Code Online (Sandbox Code Playgroud)
不幸的是,当需要在 Dockerfile 中添加 ./requirements.txt / 时,它就会停止,并且似乎找不到它。
enter Building api-service-track-1
Sending build context to Docker daemon 3.072kB
Step 1/5 : FROM python:3
---> a42e2a4f3833
Step 2/5 : ADD ./requirements.txt /
ADD failed: file not found in build context or excluded by .dockerignore: stat requirements.txt: file does not exist
ERROR: Service 'api-service-track-1' failed to build : Build failed
Run Code Online (Sandbox Code Playgroud)
requirements.txt 包含
Flask==1.1.2
Flask-SQLAlchemy
Flask-Bcrypt
bleach
Run Code Online (Sandbox Code Playgroud)
这是我的 Dockerfile
FROM python:3
ADD ./requirements.txt /
RUN pip3 install -r requirements.txt
WORKDIR /mnt/app/
CMD ["./run.sh", "./project/codeAPI/API.py", "./project/codeAPI/front.py"]
Run Code Online (Sandbox Code Playgroud)
编辑:@DavidMaze 这是我的 docker-compose.yml 的代码
version: '3'
services:
api-service-track-1:
build:
context: ./
dockerfile: ./Dockerfile
image: img_track1
volumes:
- ./:/mnt/app
ports:
- 5551:5551
Run Code Online (Sandbox Code Playgroud)
编辑2:这是我尝试启动docker后遇到的错误。
Starting docker_api-service-track-1_1 ... error
ERROR: for docker_api-service-track-1_1 Cannot start service api-service-track-1: failed to create shim: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "./run.sh": stat ./run.sh: no such file or directory: unknown
ERROR: for api-service-track-1 Cannot start service api-service-track-1: failed to create shim: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "./run.sh": stat ./run.sh: no such file or directory: unknown
ERROR: Encountered errors while bringing up the project.
Run Code Online (Sandbox Code Playgroud)
这是否意味着我还需要更改 run.sh 目录?
编辑3:run.sh
#!/bin/bash
export PYTHONPATH=$PWD/project/
echo python path is:
echo $PYTHONPATH
echo running the following python program
echo $@
python3 "$1"
python3 "$2"
Run Code Online (Sandbox Code Playgroud)
您的上下文(作为目录)不包括添加的文件。这是主要问题。
有 3 条相互关联的黄金法则:
docker-compose.yamlADD (or COPY`) 第一个参数是相对于该上下文的路径ADD (or COPY`)第一个参数是路径必须位于上下文文件夹内(无论是直接还是在上下文的子目录中)让我们应用这 3 条规则:
你docker-compose.yaml在里面./project/docker,你的背景在./。
=> 你的背景是./project/docker
ADD ./requirements.txt ...& 语境./project/docker。
=> 意味着你的requirements.txt路径是./project/docker/requirements.txt错误的,因为它../../requirements.txt 相对于上下文存在(./project/docker)
现在假设您通过放置正确的 requests.txt 路径来解决问题:
ADD ../../requirements.txt .
Run Code Online (Sandbox Code Playgroud)
项目/docker/docker-compose.yaml
services:
api-service-track-1:
build:
context: ../../ # context must include `requirements.txt`
dockerfile: ./project/docker/Dockerfile # must be relative to context
Run Code Online (Sandbox Code Playgroud)
项目/docker/Dockerfile
# ./ is Relative to the context
ADD ./requirements.txt ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10592 次 |
| 最近记录: |