0

我有以下目录树:

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(以便它复制并解压缩 tarball)到图像中。但是,在尝试了 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

4

0 回答 0