我正在尝试将文件从我的主机 (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
答案 0 :(得分:0)
我相信您的 COPY
命令有两个问题:
~
,它不会像在 shell 脚本中那样转换为主目录。试试这个:
COPY config/.asoundrc /root/.asoundrc
此外,在查看您的 docker-compose.yml
后,很明显主要问题就在那里。
您的 docker-compose 文件定义了构建上下文:
services:
python:
build:
context: ./docker/python
这意味着这是所有 COPY
命令都相对的目录。由于此目录仅包含 Dockerfile
,而不包含请求的 config/.asoundrc
文件,因此构建失败并出现明显错误。
您应该将每个 Dockerfile
放在与其构建的应用程序相同的目录中。所以,修复它:
Dockerfile
从 docker
移动到 dejavu
。docker-compose.yml
中的构建上下文从 ./docker/python
更改为 dejavu
(另请注意,不需要前导点)。