Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker compose生成失败,因为在卷中创建了容器链接_Docker_Docker Compose_Airflow_Docker Volume - Fatal编程技术网

Docker compose生成失败,因为在卷中创建了容器链接

Docker compose生成失败,因为在卷中创建了容器链接,docker,docker-compose,airflow,docker-volume,Docker,Docker Compose,Airflow,Docker Volume,我有一个设置,其中airflow在docker容器中运行,并将其日志目录映射到主机中的目录。运行时,它会创建一个文件系统链接/usr/local/aiffair/logs/scheduler/latest,该链接在容器中但在主机中没有有效的目标。下次运行docker compose build时,它会在该链接上跳闸并导致生成失败 我尝试忽略.dockrignore目录中的日志,但这并没有改变任何事情 我的设置的相关部分如下: 工作目录 ***/docker/ airflow/ log

我有一个设置,其中airflow在docker容器中运行,并将其日志目录映射到主机中的目录。运行时,它会创建一个文件系统链接
/usr/local/aiffair/logs/scheduler/latest
,该链接在容器中但在主机中没有有效的目标。下次运行
docker compose build
时,它会在该链接上跳闸并导致生成失败

我尝试忽略.dockrignore目录中的日志,但这并没有改变任何事情

我的设置的相关部分如下:

工作目录

***/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/
            ...
Dockerfile

FROM puckel/docker-airflow:1.8.1

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

./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
$pwd
/***/码头工人
$docker组合构建
建筑气流
回溯(最近一次呼叫最后一次):
文件“/usr/local/bin/docker compose”,第11行,在
sys.exit(main())
文件“/usr/local/lib/python2.7/dist-packages/compose/cli/main.py”,第71行,在main中
命令()
文件“/usr/local/lib/python2.7/dist packages/compose/cli/main.py”,第124行,在perform_命令中
处理程序(命令、命令选项)
文件“/usr/local/lib/python2.7/dist-packages/compose/cli/main.py”,第254行,内部版本
构建参数=构建参数)
文件“/usr/local/lib/python2.7/dist-packages/compose/project.py”,第364行,内部版本
构建(无缓存、拉、强制、内存、构建参数)
文件“/usr/local/lib/python2.7/dist-packages/compose/service.py”,第967行,内部版本
“内存”:如果没有内存,则解析_字节(内存)
文件“/usr/local/lib/python2.7/dist-packages/docker/api/build.py”,第150行,内部版本
路径,exclude=exclude,dockerfile=dockerfile,gzip=gzip
tar中的文件“/usr/local/lib/python2.7/dist-packages/docker/utils/build.py”,第14行
root=root,fileobj=fileobj,gzip=gzip
文件“/usr/local/lib/python2.7/dist packages/docker/utils/utils.py”,第103行,在create_archive中
'无法访问上下文中的文件:{}'。格式(完整路径)
IOError:无法访问上下文中的文件:/***/docker/airflow/logs/scheduler/latest
如果我在运行
docker compose build
之前删除了
airflow/logs/
的内容,则一切正常,airflow再次创建相同的链接,我必须继续删除它

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

编辑以响应我的问题,该问题被标记为

  • 我不想让容器与主机中的链接一起工作。容器创建链接(尽管我同意主机中链接被破坏的根本原因对于这两个问题是相同的)
  • 我不希望链接在容器和主机上都起作用。我真的不在乎主机的符号链接是否损坏。我希望docker忽略该链接,或者理想情况下忽略整个
    气流/logs
    目录
  • 我不能仅仅在主机上创建一个虚拟目录来逃避这个问题,因为气流每天都会改变那个链接的目标
  • 链接问题中的公认答案并没有给出解决方案,它所说的只是“不要将符号链接用于在主机和容器上具有不同路径的目标”。我不能控制那个符号链接。气流很小

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


是指向.dockerginore文档的链接。
您的
。dockerginore
可能不会生效,因为您为气流设置的生成上下文是
,它与
.dockerginore
文件所在的目录不同。Docker compose正在相对于生成上下文的位置中查找您的
.dockrignore
文件

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

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

这将有助于Docker Compose在构建时找到您的
.dockrignore
文件。

可能重复感谢您的回答!但这并不奏效。此时,我也尝试了
***/logs/***
。如果docker-compose.yml中的
上下文可以访问此符号链接,则此符号链接也会中断其他服务。**/logs/***是否解决了您的问题?如果是,则可以尝试将.dockerginore文件移动到与docker-compose.yml相同的级别,使其与docker-compose.yml处于相同的级别。看起来这是因为气流服务的
上下文
指向它。很高兴它有帮助。当您指定时。作为上下文,它是docker-compose.yaml的目录,所以是的,它是上下文