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

我有以下dir树:

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

我有build_script.sh ,它调用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 (以便它复制和解压缩包)到图像中。 但是,在尝试了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 

如果可能,我想保留这个目录结构。 我已经设法build立并运行以下命令的容器:

 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