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