D.B*_*ick 4 docker dockerfile docker-compose docker-for-windows
这是我的 Dockerfile:
\n\nFROM python:3.8-slim\n\nWORKDIR /proxy-scraper-checker-master\n\nRUN apt-get update && \\\n apt-get install -y --no-install-recommends libc-dev\n\nCOPY requirements.txt requirements.txt\nRUN pip install -r requirements.txt\n\nCOPY . /proxy-scraper-checker-master\nCMD [ "python", "main.py" ]\nRun Code Online (Sandbox Code Playgroud)\n\n这是我的 docker-compose.yml:
\n\nversion: "3.3"\n\nservices:\n proxy-app:\n build:\n context: .\n dockerfile: Dockerfile\n container_name: proxy-app\nRun Code Online (Sandbox Code Playgroud)\n\n这是我的项目目录的结构(我从中运行 docker 命令):
\n\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 docker-compose.yml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Dockerfile\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 requirements.txt\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 proxy-scraper-checker-master\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.py\nRun Code Online (Sandbox Code Playgroud)\n\n当我在上面的目录中运行以下命令时:
\n\n\n\n\ndocker-compose up
\n
我收到以下错误消息:
\n\nC:\\Projects\\myprojects\\docker-example>docker-compose up\nCreating proxy-app ... done\nAttaching to proxy-app\nproxy-app | python: can\'t open file \'./main.py\': [Errno 2] No such file or directory\nproxy-app exited with code 2\nRun Code Online (Sandbox Code Playgroud)\n\n有人可以指导我做错了什么吗?
\n问题出在线路上。
COPY . /proxy-scraper-checker-master
CMD [ "python", "main.py" ]
Run Code Online (Sandbox Code Playgroud)
您将整个目录复制到 中/proxy-scraper-checker-master,因此您的main.py文件将是/proxy-scraper-checker-master/proxy-scraper-checker-master/main.py.
要调试此问题,您可以在容器内输入 bash 终端并查看目录结构以查找main.py. docker-compose将会构建镜像,因此您可以使用 找到镜像名称docker images,或者也可以重建它。
jakub@dash:/tmp/so$ docker build --tag my_python .
jakub@dash:/tmp/so$ docker run --rm -it my_python bash
# At this point, we are inside the Docker container.
root@924a7f854119:/proxy-scraper-checker-master# pwd
/proxy-scraper-checker-master
root@924a7f854119:/proxy-scraper-checker-master# ls
Dockerfile docker-compose.yml proxy-scraper-checker-master requirements.txt
root@924a7f854119:/proxy-scraper-checker-master# realpath proxy-scraper-checker-master/main.py
/proxy-scraper-checker-master/proxy-scraper-checker-master/main.py
Run Code Online (Sandbox Code Playgroud)
至此,我们已经找到了路径main.py。为了解决原来的问题,我们可以将CMDDockerfile 中的 更改为以下内容:
CMD [ "python", "/proxy-scraper-checker-master/proxy-scraper-checker-master/main.py" ]
Run Code Online (Sandbox Code Playgroud)
我们可以改进 Dockerfile 以删除冗余COPY指令。使用下面的 Dockerfile,绝对路径main.py是/app/proxy-scraper-checker-master/main.py. 我们可以用相对路径引用它,proxy-scraper-checker-master/main.py因为我们当前处于/app(感谢指令WORKDIR)。我们也可以用绝对路径引用它。
FROM python:3.8-slim
RUN apt-get update && \
apt-get install -y --no-install-recommends libc-dev
WORKDIR /app
COPY . .
RUN pip install --no-cache-dir -r requirements.txt
CMD [ "python", "proxy-scraper-checker-master/main.py" ]
Run Code Online (Sandbox Code Playgroud)
我建议阅读COPY文档以了解其行为。
| 归档时间: |
|
| 查看次数: |
10146 次 |
| 最近记录: |