首页 > 解决方案 > Docker:将文件从主机复制到容器文件时出错

问题描述

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

我尝试了几种变体,我想知道我是否误解了如何复制文件。我已经检查了stackoverflow上的文档和其他各种问题,例如:

如何使用 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 忽略文件。我的目录如下所示:

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

为了清楚起见,我想将文件config/.asoundrc从我的主机复制到容器映像,特别是目录目标~/.asoundrc

这是我的码头文件:

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

标签: dockerdocker-composedockerfilecontainers

解决方案


我相信您的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放在与其构建的应用程序相同的目录中。所以,要修复它:

  • Dockerfilefrom移动dockerdejavu
  • 将构建上下文docker-compose.yml./docker/pythonto更改为dejavu(另请注意,不需要前导点)。

推荐阅读