티스토리 뷰

반응형

오늘 참 험난한 하루였다... 내가 Docker에 올린 프로그램은 scp로 파일을 외부로 전송하는 것이다. 그런데, UnKnownHostException, connection refused, ssh 문제 등 수 많은 다양한 에러들을 확인하고 드디어! 해결했다.

이 글은 내가 접한 모든 에러들은 제쳐두고, 그래서 제대로 사용하는 방법! 을 정리한다.

 


1.2.를 하기 전 공통사항

- Dockerfile에 Host와 연결할 포트를 설정한다.

아래 캡쳐화면은 22번을 Host 와 연결할 포트로 지정한 것이다.

ex) EXPOSE 22

 

- Dockerfile을 이용하여, Docker Image를 생성한다.

$docker build --tag [docker image 명(소문자여야 함)]:[Version 번호] [Dockerfile 경로]

ex) $docker build --tag dockerimage:1.0 .

※ docker image 소문자로 안적어서 몇 번 틀렸었음

 

 

1. docker run 명령어로 외부 포트 연결

- docker run 을 이용하여, image에 대한 Docker Container 의 create 및 start를 동시에 실행할 수 있다. 

$docker run -P [host 포트]:[container 포트] [그 외 옵션] [docker이미지]

ex)$docker run -P 2000:22 --env JAVA_OPTS="-DBOOTSTRAP_SERVER=127.0.0.1:9092 -DTOPIC=topic" dockerimage:1.0

※ --env 는 도커를 통해 실행하는 프로그램에 대한 각종 환경설정을 제공한다. ENV로 설정한 환경 변수는 RUN,CMD,ENTRYPOINT에 적용된다.

 

 

 

2. Docker Engine API 를 이용하여 외부 포트 연결

- docker 에서는 API 또한 제공한다.

https://docs.docker.com/engine/api/v1.41/#operation/ContainerCreate

 

Docker Engine API v1.41 Reference

 

docs.docker.com

Docker API 를 이용하여, docker를 실행시키려면 다음과 같은 속성들을 추가해야 한다. 

※ Docker API에서는 run 으로 한번에 create 및 start를 할 수 없으므로, Container 생성 후 Container 시작을 진행해야 한다.

아래 속성은 Create Container 할 때, Body에 작성해야 하는 것들이다.

* ExposedPort 설정

* HostConfig의 PortBindings 설정

위 속성 2가지 전부 설정해줘야 한다. (처음에 HostConfig의 PortBindings를 확인하지 못하고 ExposedPort만 했다가 여러번 UnknownHostException을 만났다.)

ex)

{
   "Env":[
      "JAVA_OPTS=-DBOOTSTRAP_SERVER=172.30.1.2:9092 -DTOPIC=topic"
   ],
   "Image":"dockerimage:1.0",
   "ExposedPorts":{
      "22/tcp":{
         
      }
   },
   "HostConfig":{
      "PortBindings":{
         "22/tcp":[
            {
               "HostPort":"2000"
            }
         ]
      }
   }
}

 

 

 

 

 

 

이것저것 문제 다 겪고 막상 해결하면 별 것 아닌 것 같은데, 한 번 문제 터지기 시작하면 끝도 없이 꼬이는지... 후... 정리했으니깐 다음엔 덜 헤매겠지... 

 

 

 

 

※ 자바로 scp를 전송하는 코드가 궁금하다면... 아래 클릭

2022.07.05 - [etc] - [JAVA] JAVA 로 SCP 실행하는 방법 (jSch 라이브러리)

 

[JAVA] JAVA 로 SCP 실행하는 방법 (jSch 라이브러리)

JAVA로 command 명령어를 작성할 수 있다. ProcessBuilder 를 이용하면 되는데, 나는 처음에 ProcessBuilder를 이용하여 scp를 실행하려고 하였다. 그런데, ProcessBuilder 를 이용해 scp를 사용하려면, password..

tbmaster.tistory.com

 

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함