2016-10-18 1 views
0

나는 다음과 같은 오류가 발생 davfs2 볼륨을 마운트 :을 수 고정 표시기 컨테이너를 열 수 없습니다 퓨즈 장치 I는 고정 표시기 컨테이너에 davfs2 볼륨을 탑재하려고하면

[email protected]:~$ mount owncloud/ 
/sbin/mount.davfs: loading kernel module fuse 
/sbin/mount.davfs: loading kernel module fuse failed 
/sbin/mount.davfs: waiting for /dev/fuse to be created 
/sbin/mount.davfs: can't open fuse device 
/sbin/mount.davfs: trying coda kernel file system 
/sbin/mount.davfs: no free coda device to mount 

Dockerfile은 다음과 같은 내용이 있습니다 :

FROM debian:jessie 

ENV DEBIAN_FRONTEND noninteractive 
ENV TERM linux 

# environment variables 
ENV GEOSERVER_PASS geoserver 

RUN apt-get update 
RUN apt-get install -y davfs2 fuse 

RUN groupadd --gid 999 geoserver 
RUN useradd -ms /bin/bash --home /home/geoserver \ 
     -p $(echo "print crypt("${GEOSERVER_PASS:-geoserver}", "salt")" | perl) \ 
     --uid 999 --gid 999 geoserver 

USER geoserver 
RUN mkdir /home/geoserver/owncloud 
RUN mkdir /home/geoserver/.davfs2 

USER root 
ADD secrets /home/geoserver/.davfs2/secrets 
RUN chown geoserver:geoserver /home/geoserver/.davfs2/secrets 
RUN chmod 0600 /home/geoserver/.davfs2/secrets 

RUN chmod u+s /sbin/mount.davfs 
RUN perl -p -i -e "s/#\s*use_locks\s*1/use_locks 0/" /etc/davfs2/davfs2.conf 
RUN adduser geoserver davfs2 
RUN echo "https://my-owncloud-server.org/owncloud/remote.php/webdav /home/geoserver/owncloud davfs rw,user,noauto 0 0" >> /etc/fstab 

...장치/디바이스/퓨즈

[email protected]:/# ls -l /dev/fuse 
crw-rw-rw- 1 root root 10, 229 Oct 18 12:06 /dev/fuse 

존재하지만 탑재 실패 17,451,515,내가 로그에 흥미로운 일을 볼 수 없습니다 :

/var/log/daemon.log

[email protected]:/# tail /var/log/daemon.log 
Oct 18 12:36:03 8e8091d97157 mount.davfs: davfs2 1.5.2 
Oct 18 12:36:04 8e8091d97157 mount.davfs: the server certificate is not trusted 
Oct 18 12:36:04 8e8091d97157 mount.davfs: issuer: TERENA, Amsterdam, Noord-Holland, NL 
Oct 18 12:36:04 8e8091d97157 mount.davfs: subject: Domain Control Validated 
Oct 18 12:36:04 8e8091d97157 mount.davfs: identity: owncloud-mshe.univ-fcomte.fr 
Oct 18 12:36:04 8e8091d97157 mount.davfs: accepted by user 

/var에// 디버그에게/

[email protected]:/# tail /var/log/debug 
Oct 18 12:36:03 8e8091d97157 mount.davfs: davfs2 1.5.2 

/var에 로그/인증 로그. 로그

[email protected]:/# tail /var/log/auth.log 
Oct 18 12:35:59 8e8091d97157 su[890]: Successful su for geoserver by root 
Oct 18 12:35:59 8e8091d97157 su[890]: + ??? root:geoserver 
Oct 18 12:35:59 8e8091d97157 su[890]: pam_env(su:session): Unable to open env file: /etc/default/locale: No such file or directory 
Oct 18 12:35:59 8e8091d97157 su[890]: pam_unix(su:session): session opened for user geoserver by (uid=0) 
Oct 18 12:36:09 8e8091d97157 su[890]: pam_unix(su:session): session closed for user geoserver 

모든 것이 정상적인 것처럼 보입니다. 도움을받을 수있어서 기쁩니다. 감사합니다. .

어니스트.

답변

0

해결책을 찾았습니다. 실제로 in the DockerCVMFS documentation에 설명되어 있듯이 "컨테이너에서 FUSE 파일 시스템을 실행할 수 있지만 호스트 시스템에서 FUSE를 활성화해야합니다 .Docker를 사용하면 호스트에로드 할 수없는 커널 모듈을로드 할 수 없습니다.".

modprobe in a docker container에서 설명한

따라서 내가 호스트에서 모듈 퓨즈를로드하려고 I 컨테이너를 시작 다음 명령을 사용하고, 산 해주기 OK이다

docker run --name geosync_ssh_data_1 --privileged --cap-add=ALL -v /dev:/dev -v /lib/modules:/lib/modules geosync_ssh_data 

솔루션에는 트리 단계가 포함됩니다.

Run the container in privileged mode (--privileged) 
Add all capabilities (--cap-add=ALL) 
Passthrough /lib/modules into the container (-v /lib/modules:/lib/modules) 

희망이 도움이 될 것입니다.

하나의 질문이 남아 있습니다. 그럴 수있는 유일한 방법입니까?

어니스트.

0

이러한 보안 옵션이 너무 열려 있습니다. FUSE 지원은 이제 Docker runtime privileges에 문서화되어 있습니다. 당신이 필요로 -cap-추가되어 고정 표시기 실행 명령에

--privileged --cap-add=SYS_ADMIN --device /dev/fuse 

을 추가하여 SYS_ADMIN의 --device는/dev/퓨즈

1

감사의가 성공적으로 장착.