Sangil's blog

https://github.com/ChoiSangIl Admin

docker volume not a directory 오류 DEV / DOCKER

2020-03-16 posted by sang12


저는 해당 오류를 Docker Tomcat에서 server.xml을 외부 Volume으로 설정 하려고 할때 아래와 같은 오류를 만났습니다. 혹시 몰라서 전체 오류를 아래 남깁니다.

해당 문제가 발생한 원인은 제가 volume을 설정한 server.xml 파일이 호스트에 존재하지 않아서나는 오류 였습니다. 당연히 없으면 콘테이너에 있는 server.xml을 복사해서 호스트쪽으로 만들어줄지 알았는데 빈파일만 생성되고 해당 오류를 뿜었습니다. 그래서 해당 컨테이너에 접속해서 server.xml파일을 호스트로 복사해와서 다시 해당 경로로 설정해서 올리니 정상적으로 진행! 혹시 저처럼 시간을 버릴까봐 이렇게 글 남깁니다! 


ERROR: for a8255bc30abf_blog_tomcat  Cannot start service tomcat: OCI runtime create failed: container_linux.go:345: starting container process caused "process_linux.go:424: container init caused \"rootfs_linux.go:58: mounting \\\"/var/lib/jenkins/workspace/blog/docker/tomcatVol/conf\\\" to rootfs \\\"/var/lib/docker/overlay2/e2131fb169fc6e5078cc894412467d9091d90dcaba6534e982cb05426b114672/merged\\\" at \\\"/var/lib/docker/overlay2/e2131fb169fc6e5078cc894412467d9091d90dcaba6534e982cb05426b114672/merged/usr/local/tomcat/conf/server.xml\\\" caused \\\"not a directory\\\"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type


ERROR: for tomcat  Cannot start service tomcat: OCI runtime create failed: container_linux.go:345: starting container process caused "process_linux.go:424: container init caused \"rootfs_linux.go:58: mounting \\\"/var/lib/jenkins/workspace/blog/docker/tomcatVol/conf\\\" to rootfs \\\"/var/lib/docker/overlay2/e2131fb169fc6e5078cc894412467d9091d90dcaba6534e982cb05426b114672/merged\\\" at \\\"/var/lib/docker/overlay2/e2131fb169fc6e5078cc894412467d9091d90dcaba6534e982cb05426b114672/merged/usr/local/tomcat/conf/server.xml\\\" caused \\\"not a directory\\\"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type
Encountered errors while bringing up the project.
Build step 'Execute shell' marked build as failure
Finished: FAILURE
#docker not a directory #docker volume directory
REPLY

Docker Tomcat Https SSL 인증서 적용하기(LETSENCRYPT) DEV / DOCKER

2020-03-16 posted by sang12


이번에 무료로 SSL인증서를 발급해주는 LETSENCRYPT 를 통해 인증서를 발급 받았는데요 (http://sang12.co.kr/192/). 이제 실제로 해당 인증서를 Docker Container로 배포 되어 있는 Tomcat에 적용해 보겠습니다. Https를 적용하면 구글 검색순위도 높아진다죠..? :)

Docker Tomcat에서 SSL 적용하는 방법은 기존 Tomcat에서 적용하는 것과 별반 다를바 없습니다. 방법만 다를뿐.. 
일단 인증서를 적용해주기 위해 해당 tomcat 서버에 접속해서 server.xml이 어디에 있는지 확인합니다.

docker exec -it containerId bash 로 띄워져있는 tomcat에 접속합니다. 그러면 /usr/local/tomcat/conf 폴더 아래에 server.xml이 존재하는걸 확인 할 수 있는데요. 저희는 docker를 사용하니 해당 파일을 volume을 이용하여 외부로 빼서 설정을 변경 해 줄겁니다.

먼저, /usr/local/tomcat/conf/server.xml 파일을 host파일로 복사합니다.
docker cp 80f9cca1fc5c(containerId):/usr/local/tomcat/conf/server.xml ./
그리고 docker-compose를 이용하여 포트와 Volume를 설정해줍니다.

-docker-compose.xml

version: '3.7'
services:
    tomcat:
     container_name: blog_tomcat
     restart: always
     environment:
      TZ: 'Asia/Seoul'
     build:
      context: .
      args:
       warpath: ./war/ROOT.war
       dockerfile: ./Dockerfile
     ports:
      - '80:8080'
      - '443:8443'
     volumes:
      - ./tomcatVol/logs/:/usr/local/tomcat/logs/
      - ./imageVol/upload/:/usr/local/tomcat/webapps/upload/
      - ./tomcatVol/conf/server.xml:/usr/local/tomcat/conf/server.xml
      - ./tomcatVol/conf/keystore.p12:/usr/local/tomcat/conf/keystore.p12

톰캣을 올리기 위한 docker-compose 파일입니다. 여기서 보셔야 될 부분은 -./tomcatVol/conf/server.xml:/usr/local/tomct/conf/server.xml 톰캣 설정 파일을 연동 해주는 부분과 443 port를 8443포트로 연결해주는 부분 그리고  - ./tomcatVol/conf/keystore.p12:/usr/local/tomcat/conf/keystore.p12 인증서를 연결해주는 부분입니다.

이제 해당 이미지를 올리고 정상적으로 파일이 volume설정 되었는지 확인해봅시다. 수줍게 살포시 호스트에있는 server.xml에 test 문구를 넣고 해당 컨테이너에 접속해서 server.xml을 찍어봤습니다. 정상적으로 연동 되었네요(추가로 사진에는 인증서가없는데 인증서가 정상적으로 연동 되었는지도 확인합시다!). 그럼 마지막으로 server.xml 파일을 수정해주고 도커 컨테이너를 재시작 시켜주면 끝납니다!


자! server.xml을 수정해 줍시다. 그리고 Docker 컨테이너를 restart 해주면!!

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
      maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
      clientAuth="false" sslProtocol="TLS"
      keystorePass="yourePassword" keystoreFile="/usr/local/tomcat/conf/keystore.p12" >
</Connector>

그리고 https://sang12.co.kr 로 접속하면..! 


블로그를 처음부터 만들고 호스팅하는데 생각보다 많은 시간이 드네요(그래서 티스토리를 쓰나봐요 엉엉). 그래도 이렇게 하나하나 해나가는게 재미로 만들어가고 있습니다 언젠간 끝나겠죠 :) 아참! LETSENCRYPT는 인증서 유효기간이 90일이여서 90일안에 갱신을 해줘야하는데요. 갱신하는 방법도 포스팅하도록 하겠습니다. 다들 즐코하세요 ^^

#스프링부터 SSL적용 #DOCKER TOMCAT SSL #스프링부트 HTTPS #TOMCAT HTTPS #DOCKER TOMCAT HTTPS
REPLY

KUBE external ip pending! 외부 ip가 설정 안될 때! DEV / DOCKER

2020-03-13 posted by sang12


쿠버네티스를 테스트하며 node Js에서 Hello World를 찍고있는데 좀처럼 EXTERNAL-IP가 PENDING에서 변경되지가 않는다. 쉘로 접속해서 테스트 하고 있는데 로컬로는 접속이 안된단 말이다...!!

대체로 테스트를 진행할 때, Pod를 생성하고 생성한 Pod에 Service를 붙여줄텐데, Service를 붙여줄때 아래처럼 externalIPs를 설정해줘야 정상적으로 외부 아이피가 생성된다. 선생님..제가 설치할때 무엇을 잘못했는지요.. 정상적이라면 아래처럼 안해줘도 잘 되야 하는데.... 다들 화이팅..!

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  ports:
    - port: 443
      targetPort: 8443
  externalIPs:
    - 172.25.1.9
  selector:
    k8s-app: kubernetes-dashboard

#쿠버네티스 external ip pending #external ip pending #쿠버네티스 ip 확장 #쿠버네티스 외부 ip #kube 외부 ip
REPLY