不知道如何读取Docker和基于Spring Boot的应用程序中的文件

时间:2017-09-18 07:36:10

标签: docker spring-boot

在加载Docker容器中/apps/authentication/users.json中的JSON文件时面对FileNotFoundException,它是Spring-Boot应用程序。此JSON文件位于/apps/authentication/users.json文件夹中。不知道如何使用Docker读取文件。请帮忙。

尝试下面的代码:

    List<User> user = null;
    ObjectMapper mapper = new ObjectMapper();
    mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
    TypeReference<List<User>> userMapType = new TypeReference<List<User>>() {};

    InputStream userIs = TypeReference.class.getResourceAsStream("file:///apps/authentication/users.json");
    try {
        user = mapper.readValue(userIs, userMapType);
        log.info("Dummy User Object is created successfully picked from the location : "+dummyUserConfig.getLocation());
    } catch (IOException e) {
        System.out.println(e.getMessage());
    }
    finally{
        if(null != userIs) {
            try {
                userIs.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

userIs对象为null。我已经尝试了很多路径“file:///apps/authentication/users.json”的组合。

我用谷歌搜索,发现可以在这里使用Docker的音量。请指导我

1 个答案:

答案 0 :(得分:0)

我想users.json在你的主机上,但不在你的Docker容器中。您需要使用-v参数(或-m参数)并创建单独的卷,或使用bind mounts

这实际上使用以下格式将主机上的特定文件夹(或文件)安装到容器上的特定文件夹(或文件):-v SOURCE:DEST

在您的情况下,如果您只想共享文件,可以使用:

docker run -v /apps/authentication/users.json:/apps/authentication/users.json your-image

如果您想要更宽松并且想要共享整个/apps文件夹,可以使用:

docker run -v /apps:/apps your-image

您不需要在代码中实际更改任何内容。但是,如果您想使文件的位置可配置,您可以将其放在application.properties

users.file=/apps/authentication/users.json

现在您可以在代码中使用@Value

@Value("${users.file}")
private FileSystemResource usersFile;

现在,您可以拨打usersFile.getFile()usersFile.getInputStream()并使用相同的方法。

这样做的好处是您可以选择放置JSON文件的位置,如果您想使用Docker运行它,现在可以使用-e参数将USERS_FILE作为环境传递变量

docker run -v /apps/authentication/users.json:/custom/folder/users.json -e USERS_FILE /custom/folder/users.json your-image