为什么我在docker容器中使用bash脚本生成的文件也在本地保存?

时间:2018-01-09 17:14:36

标签: docker docker-compose

我想在docker中运行一个aws / appium测试项目。我有一个在容器中运行的bash脚本,它从S3下载文件并创建我的项目的zip。

Dockerfile:

FROM maven:3.3.9

RUN apt-get update && \
    apt-get -y install python && \
    apt-get -y install python-pip && \
    pip install awscli

RUN export PATH=$PATH:/usr/local/bin

有一个docker compose文件,该命令运行一个bash脚本:

version: '2'

volumes:
    maven_cache: ~

services:
    application: &application
        build: .
        tmpfs:
            - /tmp:rw,nodev,noexec,nosuid
        volumes:
            - ./:/app
            - maven_cache:/root/.m2/repository
        working_dir: /app
        command: ./aws-upload.sh

这是./aws-upload.sh bash脚本的开头。它准备了我以后需要上传的文件:

#!/usr/bin/env bash

mvn clean package -DskipTests=true

aws s3 cp s3://<bucket-name>/app.apk $(pwd)
cp target/zip-with-dependencies.zip $(pwd)

我只希望上面的文件存在于容器中,但它们也出现在本地。我的docker-compose文件中有没有正确配置的内容?

由于

2 个答案:

答案 0 :(得分:1)

在您的撰写文件中,您定义了一个卷./:/app,它将撰写文件所在的主机文件夹映射到容器app文件夹。如果您在app文件夹中执行bash脚本,它还会使主机上创建的文件可用。

如果你想避免这种情况,请删除卷映射(如果你不需要它)或在另一个未映射到你主机的文件夹中执行脚本。

答案 1 :(得分:0)

这很正常。在composefile中声明以下内容时:

volumes:
    - ./:/app

这意味着将当前主机目录挂载到容器内的/app。这将有效地保持当前目录和容器内的/app文件夹同步。

因此,如果aws-upload.sh脚本在/app中创建文件,它们也会显示在撰写文件旁边。