인프런 커뮤니티 질문&답변
docker -e 옵션에 대한 질문
작성
·
92
·
수정됨
답변 2
0
안녕하세요, 이도원입니다.
Docker 기동 시 -e(--environment) 옵션은 컨테이너가 기동 될 때 내부로 환경 변수 등의 정보를 전달하기 위해서 사용하는 옵션입니다. 실제로 패키징 된 jar 파일을 실행할 때, application.properties(application.yml) 파일에 설정 된 정보를 Command line에서 변경하고자 할 때 아래와 같이 -D 옵션을 이용할 수 있습니다.
java -jar -Dserver.port=8081 app.jarJava 애플리케이션을 실행하도록 작성 된 Docker 이미지를 이용하여 컨테이너를 실행할 때, Java 애플플케이션으로 환경 변수를 전달하기 위해서는 앞서 말씀드린 -e 옵션을 통해 전달하게 되면, 컨테이너가 작동될 때 해당 옵션이 Java 실행 시 전달되게 됩니다. 예를 들어 아래와 같이 Docker를 실행할 경우
docker run -p 8088:8081 -e "server.port=8081" -e "ORDER-SERVICE-URL=localhost" -e "GATEWAY_IP=127.0.0.1" -e "TOKEN_SECRET=1234" edowon0623/user-service:v1.0docker inspect <컨테이너ID or 컨테이너명>으로 확인해 보면 아래와 같은 ENV 정보를 확인해 보실 수 있습니다.
"Config": {
"Hostname": "eef04836bceb",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": true,
"AttachStderr": true,
"ExposedPorts": {
"8081/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"TOKEN_SECRET=1234",
"server.port=8081",
"ORDER-SERVICE-URL=localhost",
"GATEWAY_IP=127.0.0.1",
"PATH=/usr/local/openjdk-17/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"JAVA_HOME=/usr/local/openjdk-17",
"LANG=C.UTF-8",
"JAVA_VERSION=17-ea+11"
],추가 질문사항 있으시면 다시 글 남겨 주세요.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
docker run 명령어에서 -e 옵션은 컨테이너 내에서 사용될 환경변수를 설정하는 데 사용됩니다. 이 경우, -e 옵션으로 지정한 spring.datasource.url는 스프링 부트 애플리케이션에 대한 데이터베이스 연결 정보를 설정하는 환경변수입니다. 스프링 부트 애플리케이션은 환경변수를 통해 외부 설정을 주입받을 수 있도록 설계되어 있습니다. 따라서, 컨테이너가 실행될 때 -e 옵션을 통해 설정한 환경변수는 스프링 부트 애플리케이션 내부에서 해당하는 프로퍼티 값으로 사용됩니다.
스프링 부트는 application.properties나 application.yml과 같은 설정 파일 외에도 환경변수를 통한 설정을 지원합니다. 이를 통해 개발, 배포 환경에 따라 다른 설정값을 유연하게 적용할 수 있게 합니다. 예를 들어, 데이터베이스 URL, 사용자 이름, 비밀번호와 같은 중요한 정보를 외부에서 안전하게 주입할 수 있습니다.
-e "spring.datasource.url=jdbc:mariadb://my-mariadb:3306/mydb"이 부분은 스프링 부트 애플리케이션에게 MariaDB 데이터베이스에 대한 접속 정보를 환경변수를 통해 제공하는 것입니다. 이러한 방식으로 스프링 부트까지 옵션 전달이 이루어지며, 애플리케이션은 이 정보를 바탕으로 데이터베이스와 연결합니다.
님의 궁금증이 해결되기를 바랍니다.





