Docker-compose 构建失败,因为容器在卷中创建 link

Docker-compose build fails because of container-created link in a volume

我有一个设置,其中气流在 docker 容器中 运行,并将其日志目录映射到主机中的目录。虽然 运行,但它会创建一个文件系统 link /usr/local/airflow/logs/scheduler/latest,该文件系统在容器内有一个有效目标,但在主机中没有。下一次 运行 docker-compose build 它在那个 link 上绊倒并且构建失败。

我试过忽略 .dockerignore 中的日志目录,但这并没有改变任何东西。

我设置的相关部分如下:

工作目录

***/docker/
  airflow/
    logs/
      scheduler/
        ...
        2018-01-30/
        latest -> /usr/local/airflow/logs/scheduler/2018-01-30
    .dockerignore
    Dockerfile
    ...
  docker-compose.yml
  ...

docker-compose.yml

version: '2'
services:
    ...
    airflow:
        ...
        build:
            dockerfile: airflow/Dockerfile
            context: .
        environment:
            - LOAD_EX=n
            - EXECUTOR=Local
        volumes:
            - ./airflow/logs:/usr/local/airflow/logs/
            ...

Docker 文件

FROM puckel/docker-airflow:1.8.1

USER root
...
RUN chown -R airflow: /usr/local/airflow
USER airflow
...

.docker忽略

./logs
...

我进入终端时出错:

$ pwd
/***/docker
$ docker-compose build
Building airflow
Traceback (most recent call last):
File "/usr/local/bin/docker-compose", line 11, in <module>
    sys.exit(main())
File "/usr/local/lib/python2.7/dist-packages/compose/cli/main.py", line 71, in main
    command()
File "/usr/local/lib/python2.7/dist-packages/compose/cli/main.py", line 124, in perform_command
    handler(command, command_options)
File "/usr/local/lib/python2.7/dist-packages/compose/cli/main.py", line 254, in build
    build_args=build_args)
File "/usr/local/lib/python2.7/dist-packages/compose/project.py", line 364, in build
    service.build(no_cache, pull, force_rm, memory, build_args)
File "/usr/local/lib/python2.7/dist-packages/compose/service.py", line 967, in build
    'memory': parse_bytes(memory) if memory else None
File "/usr/local/lib/python2.7/dist-packages/docker/api/build.py", line 150, in build
    path, exclude=exclude, dockerfile=dockerfile, gzip=gzip
File "/usr/local/lib/python2.7/dist-packages/docker/utils/build.py", line 14, in tar
    root=root, fileobj=fileobj, gzip=gzip
File "/usr/local/lib/python2.7/dist-packages/docker/utils/utils.py", line 103, in create_archive
    'Can not access file in context: {}'.format(full_path)
IOError: Can not access file in context: /***/docker/airflow/logs/scheduler/latest

如果我在 运行 docker-compose build 之前删除 airflow/logs/ 的内容一切正常并且气流再次创建相同的 link 我必须继续删除它。

我希望 docker-compose 完全忽略 airflow/logs 目录。理想情况下,在主机中,不要从容器内部创建文件系统 link 气流。

EDIT 回应我的问题被标记为

的潜在重复项

您的 .dockerignore 文件似乎被 docker 守护进程忽略了。尝试将 ./logs 更改为 ./airflow/logs/**

here 是 link 到 .docker忽略文档

您的 .dockerignore 可能没有生效,因为您为 airflow 设置的构建上下文是 .,它与您的 .dockerignore 文件所在的目录不同。 Docker compose 正在相对于构建上下文的位置寻找您的 .dockerignore 文件。

在您的 docker-compose.yml 中,尝试将构建上下文设置为 ./airflow 并将 dockerfile 设置为 Dockerfile

airflow:
    ...
    build:
        dockerfile: Dockerfile
        context: ./airflow

这应该有助于 Docker Compose 在构建时找到您的 .dockerignore 文件。