Docker:未找到将文件从主机复制到容器文件时出错

时间:2021-02-11 14:11:43

标签: docker docker-compose dockerfile containers

我正在尝试将文件从我的主机 (Ubuntu 18.04) 复制到 python 容器,但我无法复制它。目的是采用我的默认声音设备的特定配置并将其传输过来,这样我以后就不必手动进行了。

我尝试了几种变体,我想知道我是否误解了如何复制文件。我已经检查了文档和人们在 stackoverflow 上提出的其他各种问题,就像这样:

How to copy file from host to container using Dockerfile

但是当我尝试传统命令时出现错误:

docker-compose build 
...
Step 7/7 : COPY /config/.asoundrc ~/.asoundrc
COPY failed: file not found in build context or excluded by .dockerignore: stat config/.asoundrc: file does not exist

我的根目录中没有 docker ignore 文件。我的目录如下所示:

dejavu (root name)
-config
--.asoundrc
-docker-compose.yaml
...

明确地说,我想将文件 config/.asoundrc 从我的主机复制到容器映像,特别是将目录目标复制为 ~/.asoundrc

这是我的 dockerfile:

FROM python:3.7
RUN apt-get update -y && apt-get upgrade -y
RUN apt-get install \
    gcc nano \
    gdebi alsa-utils usbutils ffmpeg libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0 \
    postgresql postgresql-contrib pulseaudio -y
RUN pip install numpy scipy matplotlib pydub pyaudio psycopg2 sounddevice

WORKDIR /code
COPY /config/.asoundrc ~/.asoundrc

这是原始存储库,它目前正在从一个开源项目中修改:https://github.com/datafaust/dejavu

1 个答案:

答案 0 :(得分:0)

我相信您的 COPY 命令有两个问题:

  1. 源路径以斜杠开头,不应该
  2. 您的目标路径包含一个 ~,它不会像在 shell 脚本中那样转换为主目录。

试试这个:

COPY config/.asoundrc /root/.asoundrc

此外,在查看您的 docker-compose.yml 后,很明显主要问题就在那里。

您的 docker-compose 文件定义了构建上下文:

services:
  python:
    build:
      context: ./docker/python

这意味着这是所有 COPY 命令都相对的目录。由于此目录仅包含 Dockerfile,而不包含请求的 config/.asoundrc 文件,因此构建失败并出现明显错误。

您应该将每个 Dockerfile 放在与其构建的应用程序相同的目录中。所以,修复它:

  • Dockerfiledocker 移动到 dejavu
  • docker-compose.yml 中的构建上下文从 ./docker/python 更改为 dejavu(另请注意,不需要前导点)。