docker-compose无论如何,在构建上下文外部(或内部)添加tarball总是失败

时间:2017-10-30 22:35:44

标签: docker docker-compose dockerfile docker-engine

我有以下的目录树:

project_root
|- build_script.sh
|- dir_1/Dockerfile and docker-compose.yml
|- tarball_dir/

我已经build_script.sh调用了docker-compose,如此:

docker-compose -f ./dir_1/docker-compose.yml build --build-arg BUILD_ID=$BUILD_ID dev

这是Dockerfile

 FROM elixir:1.5.2

  ARG BUILD_ID
  ENV APP_HOME /app
  RUN mkdir $APP_HOME

  # Copy release tarball and unpack
~ ADD ../dir_1/${BUILD_ID}.tar.gz $APP_HOME/

  CMD $APP_HOME/bin/my_app foreground

这是docker-compose-yml

version: '2'

  services:
    common:
      build:
        context: .
        dockerfile: ./Dockerfile
      networks:
        - default

    dev:
      extends:
        service: common
      env_file:
        - ./dev.env
      environment:
        POSTGRES_HOST: "postgres.dev"
        MIX_ENV: dev
      ports:
        - "4000:4000"
      depends_on:
        - postgres

我希望能够ADD(以便将tar包复制并解压缩到图像中)。但是,在尝试无限组合Docker上下文目录并尝试将tarball包含到图像中之后,我总是会遇到两个错误之一:

ERROR: Service 'dev' failed to build: ADD failed: Forbidden path outside the build context: ../tarball_dir/tarball.tar.gz ()

ERROR: Service 'dev' failed to build: ADD failed: stat /var/lib/docker/tmp/docker-builder887135091/tarball_dir/tarball.tar.gz: no such file or directory

如果可能的话,我想保留这个目录结构。我已经设法使用以下命令构建和运行容器:

docker build \
--build-arg BUILD_ID=$BUILD_ID \
-t my_app:$BUILD_ID \
-f dir_1/Dockerfile .

docker run \
--network my_app_network \
--env-file ./dir_1/$ENV.env \
 my_app:$BUILD_ID

但无论如何,我无法使用docker-compose重现同样的行为。

我在Mac OS Sierra和我使用Docker Edge版本17.10.0-ce-mac36(19824)频道:edge a7c7e01149

0 个答案:

没有答案