Dockerfile的ADD和COPY命令不起作用

时间:2018-03-26 08:56:19

标签: docker heroku dockerfile

在我将图像和shell构建到容器中之后,我不会看到我应该添加/复制的任何文件/目录。
我将容器上传到Heroku,并运行bash来环顾四周。 一旦我进入,在根级别,我在一个名为app的目录中。

我在同一个Dockerfile中尝试了多个命令排列。什么都行不通..

COPY . app/
COPY . /app/
COPY config config/
ADD luup luup/
COPY luup ./luup/
COPY luup app/luup/
COPY ./luup app/luup/
COPY luup app/
COPY requirements requirements/
COPY manage.py manage.py
ADD ./config /config/
ADD ./config /app/config/
ADD ./config /app/config  

是什么给出的?

这是一个修剪过的树:

.
├── Dockerfile.django
├── Dockerfile.local
├── Dockerfile.test
├── LICENSE
├── Procfile
├── README.rst
├── compose
│   ├── local
│   │   └── django
│   │       ├── celery
│   │       │   ├── beat
│   │       │   │   └── start.sh
│   │       │   └── worker
│   │       │       └── start.sh
│   │       └── start.sh
│   └── production
│       ├── caddy
│       │   ├── Caddyfile
│       │   └── Dockerfile.caddy
│       ├── django
│       │   ├── Dockerfile.django
│       │   ├── celery
│       │   │   ├── beat
│       │   │   │   └── start.sh
│       │   │   └── worker
│       │   │       └── start.sh
│       │   ├── entrypoint.sh
│       │   └── gunicorn.sh
│       └── postgres
│           ├── Dockerfile.postgres
│           └── maintenance
├── config
│   ├── __init__.py
│   │   └── wsgi.cpython-36.pyc
│   ├── settings
│   │   ├── __init__.py
│   │   ├── __pycache__
│   │   │   ├── __init__.cpython-35.pyc
│   │   │   └── production.cpython-36.pyc
│   │   ├── base.py
│   │   ├── local.py
│   │   ├── production.py
│   │   └── test.py
│   ├── urls.py
│   └── wsgi.py
├── docs
│   ├── Makefile
│   ├── __init__.py
│   └── make.bat
├── heroku.yml
├── local.yml
├── locale
│   └── README.rst
├── luup
│   ├── __init__.py
│   ├── contrib
│   ├── static
│   │   ├── base.html
│   │   ├── pages
│   │   │   ├── about.html
│   │   │   └── home.html
│   │   └── users
├── manage.py
├── requirements
│   ├── base.txt
│   ├── local.txt
│   └── production.txt

有多个Dockerfiles,但我使用/测试的是,它们都是root用户。

这是我在shell中的样子:

Running bash on ⬢ boiling-anchorage-81724... up, run.2463 (Free)
~ $ pwd
/app
~ $ ls
~ $ ls
~ $ cd ..
/ $ ls
app  bin  dev  etc  lib  lib64  lost+found  proc  sbin  sys  tmp  usr  var  

如你所见,那里什么也没有。 ls什么都不返回。这是我上面使用的Dockerfile的结果 - 包含许多COPYADD语句。

有人可以帮忙吗?在过去的几天里,我一直在为此而奋斗。

真的搞乱了一切,这个工作:

COPY ./requirements /usr/src/app/requirements
RUN pip install --no-cache-dir -r /usr/src/app/requirements/production.txt  

因为它最终会安装所有要求 我也尝试过将文件/目录复制到/ usr / src / app中,但即使我这样做,也不会在我进入shell时看到它。

编辑:根据heroku here
"工作目录是/。您可以使用WORKDIR设置不同的目录。"

编辑:除了Dockerfile之外,还有其他任何我应该关注的配置吗?

2 个答案:

答案 0 :(得分:1)

除非您在Dockerfile中指定了WORK_DIR /app,否则右侧的相对泊坞窗路径将无效。

COPY . app/

应该是

COPY . /app/

答案 1 :(得分:0)

上面的nelsonenzo答案是正确的。您需要在COPY之前添加WORKDIR语句,因为WORKDIR命令将同时创建文件夹和更改该文件夹。

WORKDIR / app等效于mkdir / app和CD / app

在您的Dockerfile中尝试一下:

WORKDIR /app
COPY . /app/