class path resource cannot be opened because it does not exits

E:\SoftwareTools\Java\jdk\bin\java ...
八月 12, 2017 10:42:56 下午 org.springframework.context.annotation.AnnotationConfigApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@3f91beef: startup date [Sat Aug 12 22:42:56 CST 2017]; root of context hierarchy
八月 12, 2017 10:42:57 下午 org.springframework.context.annotation.AnnotationConfigApplicationContext refresh
警告: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [com.yubai.EL.ELConfig]; nested exception is java.io.FileNotFoundException: class path resource [com/yubai/EL/test.properties] cannot be opened because it does not exist
Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [com.yubai.EL.ELConfig]; nested exception is java.io.FileNotFoundException: class path resource [com/yubai/EL/test.properties] cannot be opened because it does not exist
    at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:181)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:308)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:228)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:270)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:93)
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:687)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:525)
    at org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:84)
    at com.yubai.EL.MainEl.main(MainEl.java:7)

这里写图片描述

分析思路

在路劲com/yubai/EL下存在此文件,但错误信息输出如下:

class path resource [com/yubai/EL/test.properties] cannot be opened because it does not exist

从错误信息可以看出
1. com/yubai/EL/test.properties 这个文件不存在,但从图片中可以看出,此文件是存在的,可想而知,IDEA不是在此文件下查找的,所以test.properties不应该放在此目录下。
2. 再查看错误信息,可以看出class path resource ,是在resource文件下查找的,在此resource文件夹下没有com/yubai/EL/test.properties,所以当我尝试在resource下创建此目录与文件后(com/yubai/EL/test.properties),再次执行就可以运行了

代码块

package com.yubai.EL;

import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.env.Environment;
import org.springframework.core.io.Resource;


@Configuration
@PropertySource("classpath:com/yubai/EL/test.properties")
public class ELConfig {

    @Value("classpath:com/yubai/EL/test.txt")
    private Resource testFile;

    @Value("${book.name}")
    private String bookName;


    @Bean
    public static PropertySourcesPlaceholderConfigurer propertyConfigurer(){
        return new PropertySourcesPlaceholderConfigurer();
    }

   public void output(){
        try{
            System.out.println(bookName);
            System.out.println(IOUtils.toString(testFile.getInputStream()));
        }catch (Exception e){
            e.printStackTrace();
        }
   }
}

Main.java

package com.yubai.EL;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class MainEl {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ELConfig.class);
        ELConfig resource = context.getBean(ELConfig.class);
        resource.output();
        context.close();
    }
}

这里写图片描述

<think>根据用户的问题,需要解决Docker运行时出现的错误:'error response from daemon: cgroups: cgroups mountpoint does not exist: unknown'。这个问题通常与Linux控制组(cgroups)配置有关。结合引用[1]中提到的cgroups信息(默认组有1024 shares),以及Docker依赖于cgroups进行资源管理的事实,我们可以推断这个错误是由于系统没有正确挂载cgroups导致的。 解决思路: 1. 确认cgroups是否已挂载:在Linux系统中,cgroups通常挂载在/sys/fs/cgroup目录。如果该目录不存在或为空,则可能导致此错误。 2. 检查系统是否支持cgroups:确保内核支持cgroups,并且已启用相关配置。 3. 手动挂载cgroups:如果未挂载,尝试手动挂载。 4. 检查Docker的启动配置:有些系统可能需要额外的参数来启用cgroups。 具体步骤: 步骤1:检查cgroups挂载点 在终端中运行以下命令: ```bash $ mount | grep cgroup ``` 如果没有任何输出,或者没有包含`/sys/fs/cgroup`的挂载点,则说明cgroups未挂载。 步骤2:创建挂载点并挂载cgroups 如果未挂载,可以尝试手动挂载: ```bash $ sudo mkdir -p /sys/fs/cgroup $ sudo mount -t tmpfs cgroup_root /sys/fs/cgroup $ sudo mkdir /sys/fs/cgroup/systemd $ sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd ``` 但是,更常见的做法是使用cgroupfs的挂载方式。通常,系统在启动时会自动挂载cgroups,因此重启系统可能解决。如果不想重启,可以尝试: ```bash $ sudo mount -t cgroup -o rdma cgroup /sys/fs/cgroup/ ``` 或者,使用以下命令挂载所有cgroup子系统: ```bash $ sudo mount -t proc none /proc $ sudo mount -t sysfs none /sys $ sudo mount -t cgroup none /sys/fs/cgroup $ sudo mount -t cgroup none /sys/fs/cgroup/cpuset -o cpuset $ sudo mount -t cgroup none /sys/fs/cgroup/cpu -o cpu $ sudo mount -t cgroup none /sys/fs/cgroup/cpuacct -o cpuacct $ sudo mount -t cgroup none /sys/fs/cgroup/memory -o memory $ sudo mount -t cgroup none /sys/fs/cgroup/devices -o devices $ sudo mount -t cgroup none /sys/fs/cgroup/freezer -o freezer $ sudo mount -t cgroup none /sys/fs/cgroup/net_cls -o net_cls $ sudo mount -t cgroup none /sys/fs/cgroup/blkio -o blkio ``` 注意:这些命令可能因系统而异,建议查阅系统文档。 步骤3:检查Docker的启动配置 如果系统使用systemd管理Docker服务,可以检查服务文件(如`/lib/systemd/system/docker.service`)中是否有关于cgroups的配置。确保没有使用`--exec-opt native.cgroupdriver=systemd`这样的选项,因为如果系统没有使用systemd来管理cgroups,这可能会导致问题。或者,如果系统使用systemd,则应该设置cgroupdriver为systemd。 步骤4:修改Docker的cgroup驱动 编辑或创建`/etc/docker/daemon.json`文件,添加以下内容: ```json { "exec-opts": ["native.cgroupdriver=cgroupfs"] } ``` 然后重启Docker服务: ```bash $ sudo systemctl daemon-reload $ sudo systemctl restart docker ``` 步骤5:重启系统 如果上述步骤无效,尝试重启系统,因为某些系统在启动时才会挂载cgroups。 注意:根据引用[2],Docker依赖于网络桥接(docker0)和cgroups等Linux特性。因此,确保这些基础组件正常工作至关重要。 如果问题仍然存在,可能需要检查系统内核是否支持cgroups(通过`grep CGROUP /boot/config-$(uname -r)`)以及是否加载了必要的内核模块(如`cgroup`、`cpuset`等)。 引用说明: 引用[1]提到了cgroups的shares分配,这证实了Docker使用cgroups进行资源管理,因此cgroups的缺失会导致Docker无法启动。 根据以上步骤,用户应能解决该问题。 生成相关问题: 1. 如何检查Linux系统中cgroups的挂载状态? 2. Docker中的cgroup driver选项(cgroupfs和systemd)有什么区别? 3. 如何在内核中启用cgroups支持? 4. 除了cgroups问题,还有哪些常见原因会导致Docker启动失败? </think> ### 解决 Docker 运行时 'cgroups mountpoint does not exist' 错误的方法 该错误表明 Docker 无法找到 cgroups(控制组)的挂载点,通常由系统未正确挂载 cgroups 或内核配置问题导致。以下是逐步解决方案: --- #### 1. **检查 cgroups 挂载状态** ```bash mount | grep cgroup ``` - 正常情况应显示多个 cgroup 子系统挂载点(如 `cgroup on /sys/fs/cgroup`)[^1] - **无输出**或**仅少数挂载点**需进行下一步修复 #### 2. **手动挂载 cgroups** 临时修复(重启失效): ```bash sudo mkdir -p /sys/fs/cgroup sudo mount -t tmpfs cgroup_root /sys/fs/cgroup sudo mkdir /sys/fs/cgroup/systemd sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd ``` #### 3. **永久修复 cgroups 配置** **编辑 `/etc/fstab`**,添加以下内容: ```bash none /sys/fs/cgroup cgroup defaults 0 0 ``` 保存后执行: ```bash sudo mount -a # 重新挂载所有文件系统 ``` #### 4. **检查内核启动参数** 编辑 `/etc/default/grub`,确保包含: ```bash GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1 systemd.unified_cgroup_hierarchy=0" ``` 更新并重启: ```bash sudo update-grub && sudo reboot ``` #### 5. **验证内核 cgroups 支持** ```bash grep CGROUP /boot/config-$(uname -r) ``` 确认输出包含: ```bash CONFIG_CGROUPS=y CONFIG_MEMCG=y ``` #### 6. **重装 cgroup 工具** ```bash sudo apt install --reinstall cgroup-tools ``` #### 7. **重启 Docker 服务** ```bash sudo systemctl daemon-reload sudo systemctl restart docker ``` --- ### 关键原因说明 1. **cgroups 未挂载**:Linux 系统未自动挂载 cgroups,需手动配置[^1] 2. **内核参数错误**:缺少 `cgroup_enable=memory` 等关键启动参数 3. **Docker 依赖缺失**:Docker 依赖 cgroups 实现资源隔离(如 CPU shares 分配)[^1] > ⚠️ 若使用虚拟机/云主机,需确保宿主机开启嵌套虚拟化(如 AWS 需启用 `cgroup` 支持) ---
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值