맥북 M1 시리즈 사용하고 있는데, 강의에서의 docker 이미지 다운로드 및 컨테이너 실행 시 문제가 발생하고 있습니다(이미지 다운로드는 문제없으나, 컨테이너 실행시 문제 발생). 플랫폼 관련 옵션이 추가적으로 필요합니다. --platform linux/amd64 강의 자료보면 각각 Elasticsearch, Logstash 따로 작성되어 있는데 yml 하나로 제공되어도 좋을 것으로 보입니다. version: "3.8" services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:8.10.0 container_name: elasticsearch platform: linux/amd64 ports: - "9200:9200" environment: - discovery.type=single-node - xpack.security.enabled=false - xpack.security.http.ssl.enabled=false networks: - elastic-network logstash: image: docker.elastic.co/logstash/logstash:8.10.0 container_name: logstash platform: linux/amd64 ports: - "5044:5044" - "9600:9600" volumes: - ../logstash.conf:/usr/share/logstash/pipeline/logstash.conf # logstash.conf 경로 수정 필요 networks: - elastic-network networks: elastic-network: driver: bridge
현재 이것이 백엔드 개발이다 with 자바편 책을 보면서 학습중입니다. 스프링부트에 도커에서 실행되는 데이터베이스(mysql)를 연동하려고 하는데 위와 같은 에러가 발생합니다. 스프링부트 pom.xml 내용 중 mysql 의존성 부분 application.properties 부분 도커 컨테이너 생성에서 mysql 버전 Application.java 책에서 나온 내용과 동일하게 진행했으며 스키마, 데이터베이스 테이블까지 만든 상태입니다. 어떤 것이 잘못된 건지 감이 잡히지 않습니다. 도움 부탁드려요
안녕하세요, 선생님들.. 입사한지 막 1년이 된 어른이 입니다... 지금 최대 난관에 봉착 되어 있습니다. 사내 망 베어메탈 환경에 구축된 쿠버네티스 클러스터에, 사외 망에 있는 VM 10대를 워커 노드로 추가하려고 합니다. 문제가 VM 특성 상 NAT IP 1개에 SSH 접속 포트는 10개로 (1xx01~1xx10) 구별하고 있고, 모든 포트도 오픈 할 수 없는 상황입니다. 이런 조건에서 VM을 워커노드로 추가가 가능한 것인지..., 가능하다면 좋은 방법이 있으신지 질문 드려봅니다. 노드 추가는 Kubespray로 하고 있고, CNI는 calico 환경입니다. 추가로, VM에 배포한 Calico Pod의 에러로그를 보니 10.233.0.1 (사내 망의 Master Node의 default service 주소)를 못 찾고 있었습니다. VM Calico Pod -> Master Node k8s default service -> Master Node api server 순으로 찌르는 것 같았습니다. 더불어, VM에서는 curl -k " https://121.134.39.25(master node nat ip):6443/api" 할 때 응답이 오긴 했었습니다.
안녕하세요 멘토님! 강의 잘 듣고 열심히 정리중 입니다.ㅎㅎ 프로젝트를 도커로 배포하는 중에 문제가 발생했습니다. 위와같이 도커로 배포중 yarn build를 실행할 때 빌드 시간이 멈추고 진행되지 않습니다. 새로고침하고 다시 인스턴스 터미널에 들어가면 연결이 지연되어 연결실패가 뜹니다. (해당 에러는 인스턴스 상태에서 재부팅을 통해 해결했습니다.) 해당 문제를 해결하기 위해 아래와 같이 시도했습니다. 1. 도커 푸룬으로 이미지, 캐시등 삭제 - docker system prune -a 2. ec2 볼륨을 16기가로 올렸습니다. - 파티션화도 완료시켰습니다. - df -h로 xada1의 용량이 46%에서 23%로 줄어든 것을 확인했습니다. 더이상의 방법이 구글링과 제 머리로는 해결되지 않아 질문 올립니다. 감사합니다!
안녕하세요, 강사님. 강의를 듣고 있는 학생입니다. 제가 Next.js를 가지고 개발을 하고 있는데 배포를 할 때, Next.js로만 dockerfile을 작성해서 배포하면 되는 걸까요? 아니면 Vue.js와 같은 SPA 처럼 Nginx를 포함시켜서 dockerfile을 작성하고 각각 컨테이너를 만들고 연결시켜주면 되는 건가요? 제가 이쪽 지식이 부족해서 수업 이외에 다른 것도 여쭤보게 되었는데,, 만약 답변이 가능하시다면 염치불구하고 물어보고 싶습니다 ㅠㅠ 배포 환경은 EC2와 같은 가상컴퓨터환경(클라우드)에서 쿠버네티스를 만들고 그 위에 올릴거 같은데,, 어떤 구조를 참고하면 좋을지 고민이에요.
윈도우 기준으로 작성했습니다. server.js를 변경해서 도커를 다시 실행해도 변경된 코드가 반영되지 않은 문제를 확인함. 도커 컨테이너 내부 server.js를 확인하기 위해 아래 명령어로 컨테이너에 진입 docker exec -it 컨테이너아이디 sh server.js 파일을 읽기 위해 아래 명령어를 입력함 nano server.js 하지만 아래와 같은 출력이 발생하면서 파일 읽기에 실패함 아래 명령어들을 입력해 해결 apt-get update apt-get install nano nano 설치완료 후 server.js를 읽으니 아래와 같이 변경전 코드가 확인됨: 1) 변경전 res.send('Hello Word'); 2) 변경후 res.send('zxzzzzz'); 3) 도커 컨테이너에서 확인한 코드 도커 명령어 를 완벽히 이해하지 못한 상태 로 본 글을 작성했습니다. 따라서 부족한 부분이 있을 수 있습니다. 다음 강의를 위해 우선 기능이 작동하는데 초점 을 맞췄다는 점 참고 부탁드립니다. 명령어 변경: docker run -d -it -p 5000:3200 -v "/$(pwd)/server.js:/usr/src/app/server.js" joykim93/nodejs:latest 도커 컨테이너에서 server.js 파일 확인 참고: https://docs.docker.com/storage/bind-mounts/ https://cloudkul.com/knowledgebase/nano-command-not-found-docker/ https://itzone.tistory.com/610
강의와 같은 코드로 도커를 실행하면 아래와 같은 에러가 발생했습니다. Error: 'app.router' is deprecated! 해당 에러는 아래와 같이 코드를 변경해주시면 해결 가능합니다. 변경 전 코드: app.router.get('/', (req, res) => { res.send('Hello World');}) 변경 후 코드: app.get('/', (req, res) => { res.send('Hello World');})
안녕하세요, podman으로 환경 구성을 하던 중 질문이 있습니다. root 계정에 podman을 설치하고 이미지를 pull해와서 컨테이너를 빌드해봤습니다. 그리고 나서 다른 user로 접속하여 이미지와 컨테이너를 검색해보니 아무것도 보이지 않습니다. docker에서는 docker 그룹에 user를 추가하여 사용하였는데 podman group은 없는것 같네요...?! 임의로 sudo podman images 해주니까 보이긴 합니다. 모든 계정에서 동일한 이미지와 컨테이너를 보려면 어떻게 해야되나요? 다른 user계정에 root권한을 주지 않고 가능한 방법이 있을까요?
안녕하세요 강사님 강의 잘 듣고 있습니다. 제가 기존에 윈도우에서 mariadb를 설치하고 3307포트를 사용하고 있었습니다. 그런데 윈도우에서 진행하면 여러가지 오류로 때문에 docker에다 mariadb를 pull 받고 run 해서 3308포트를 포트바인딩으로 3306포트를 사용하게 했습니다. docker run --name mariadb -d -p 3308:3306 --restart=always -e MYSQL_ROOT_PASSWORD=비민번호 mariad 포트바인딩한 이유는 도커로 실행한 mariadb 에서 port가 3306을 사용중이어서 그랬습니다.(도커로 받은 이미지는 안 건드는게 좋을 것 같아서 포트바인딩을 했습니다.) 결국 주키퍼, 카프카, 카프카커넥트를 모두 켜고 my-source-connect를 아래와 같이 등록했습니다. { "name" : "my-source-connect", "config" : { "connector.class" : "io.confluent.connect.jdbc.JdbcSourceConnector", "connection.url":"jdbc:mysql://localhost:3306/mydb", "connection.user":"root", "connection.password":"비민번호입력함", "mode": "incrementing", "incrementing.column.name" : "id", "table.whitelist":"users", "topic.prefix" : "my_topic_", "tasks.max" : "1" } } 그러면 response body에 my-source-connect가 성공한 response가 201로 응답되고 127.0.0.1:8083/connectors 로 get 요청해도 my-source-connect가 잘 뜹니다. 하지만 문제는 127.0.0.1:8083/connectors/my-source-connect/status 으로 get 요청하면 다음과같이 FAILD 가 뜹니다. { "name": "my-source-connect", "connector": { "state": "FAILED", "worker_id": "192.168.56.1:8083", "trace": "org.apache.kafka.connect.errors.ConnectException: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure\n\nThe last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.\r\n\tat io.confluent.connect.jdbc.util.CachedConnectionProvider.getConnection(CachedConnectionProvider.java:59)\r\n\tat io.confluent.connect.jdbc.JdbcSourceConnector.start(JdbcSourceConnector.java:94)\r\n\tat org.apache.kafka.connect.runtime.WorkerConnector.doStart(WorkerConnector.java:185)\r\n\tat org.apache.kafka.connect.runtime.WorkerConnector.start(WorkerConnector.java:210)\r\n\tat org.apache.kafka.connect.runtime.WorkerConnector.doTransitionTo(WorkerConnector.java:349)\r\n\tat org.apache.kafka.connect.runtime.WorkerConnector.doTransitionTo(WorkerConnector.java:332)\r\n\tat org.apache.kafka.connect.runtime.WorkerConnector.doRun(WorkerConnector.java:140)\r\n\tat org.apache.kafka.connect.runtime.WorkerConnector.run(WorkerConnector.java:117)\r\n\tat java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)\r\n\tat java.util.concurrent.FutureTask.run(FutureTask.java:266)\r\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\r\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\r\n\tat java.lang.Thread.run(Thread.java:750)\r\nCaused by: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure\n\nThe last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.\r\n\tat com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174)\r\n\tat com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64)\r\n\tat com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:828)\r\n\tat com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:448)\r\n\tat com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241)\r\n\tat com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198)\r\n\tat java.sql.DriverManager.getConnection(DriverManager.java:664)\r\n\tat java.sql.DriverManager.getConnection(DriverManager.java:208)\r\n\tat io.confluent.connect.jdbc.dialect.GenericDatabaseDialect.getConnection(GenericDatabaseDialect.java:250)\r\n\tat io.confluent.connect.jdbc.util.CachedConnectionProvider.newConnection(CachedConnectionProvider.java:80)\r\n\tat io.confluent.connect.jdbc.util.CachedConnectionProvider.getConnection(CachedConnectionProvider.java:52)\r\n\t... 12 more\r\nCaused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure\n\nThe last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.\r\n\tat sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)\r\n\tat sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)\r\n\tat java.lang.reflect.Constructor.newInstance(Constructor.java:423)\r\n\tat com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)\r\n\tat com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105)\r\n\tat com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151)\r\n\tat com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167)\r\n\tat com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89)\r\n\tat com.mysql.cj.NativeSession.connect(NativeSession.java:120)\r\n\tat com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:948)\r\n\tat com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:818)\r\n\t... 20 more\r\nCaused by: java.net.ConnectException: Connection refused: connect\r\n\tat java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)\r\n\tat java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)\r\n\tat java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)\r\n\tat java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)\r\n\tat java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)\r\n\tat java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)\r\n\tat java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)\r\n\tat java.net.Socket.connect(Socket.java:613)\r\n\tat com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153)\r\n\tat com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63)\r\n\t... 23 more\r\n" }, "tasks": [], "type": "source" } 예전에 윈도우에 있던 mariadb로 3307포트로 요청하고 get하면 정상적으로 잘 됐습니다. 하지만 docker에서 run해서 컨테이너를 생성한 3306포트의 mariadb라서 문제가 있는거 같습니다.. response로 온 trace를 검색해도 원인을 파악하기는 어렵네요 뭐가 문제로 보이시고 어떻게 해결하는게 좋을까요? 감사합니다.
저는 jenkins, tomcat 을 docker 컨테이너로 올려서 실습을 하고 있는데요.. tomcat 서버에 배포를 하려고 보면.. 오류가 발생하고 있습니다. 아무래도 IP 설정이나 계정 정보가 잘못 되었을 거로 판단이 되는데.. docker 로 서비스를 구동한 경우에 tomcat IP를 어떤걸로 해야 하나요? 제 로컬PC의 IP 인지.. localhost 인지.. tomcat 컨테이너의 IP인지... 확인 부탁드립니다.
강의 정말 잘 보고 있습니다. 헷갈릴 때 마다 와서 다시 정주행 하는 것 같네요..ㅎㅎ 궁금한 점은, docker 컨테이너 만들 때 환경변수를 전달하는데, 개발할 때는 -e 옵션이나, env file위치를 넣어줄 수 있는데 실제 운영환경에서는 환경변수를 어떤식으로 관리하고 있나요 ? 감사합니다 ^^
안녕하세요 남박사님.. ubuntu 에서 docker설치 까지 진행한후 ... 강좌중 프로젝트를 docker 이미지로 만들어서 배포 내용중 10:11초까지 진행했는데요 강의 듣고있다가 컴퓨터 문제상 잠시 멈추고.. 재부팅을 하니까 portainer 웹사이트가 열리지 않은데.. 연결 시킬려고 하면 어떻게 해야할까요? 해당 아이피에 9000을넣고 실행해도 연결이 안됩니다. .. docker의 볼륨을 만들어서 portainer를 실행시킬려고 해도.. 이미 있다고 나오는데.. 검색을 해도 잘안나오는거 같아서 여쭤봅니다..!
안녕하세요 :) 좋은 강의를 통해 학습하고 실제 프로젝트를 도커 이미지화 해보려고 노력하고 있습니다 이 과정에서 궁금증이 생겼는데요 현재 react + nginx 를 사용한 클라이언트단 이미지를 만들어서 컨테이너를 생성하고, mysql 이미지를 통해 컨테이너를 생성하고, spring boot 프로젝트를 빌드하여 이미지 생성, 컨테이너 생성하였습니다. network를 생성하여 3개의 컨테이너를 하나의 network로 묶어두었는데 클라이언트앱에서 서버 api를 호출할 때, 로컬에서만 작업을 했다보니까 POST localhost:8080/api/user/signup 이런식으로 호출을 하고 있습니다. 저는 같은 네트워크로 묶었고, 포트80으로 연결을 해서 통신이 될거라고 생각을 했는데 엔진엑스에서 405 Not Allowed가 뜨네요ㅠㅠㅠ api 호출하는 기본 url을 서버단 컨테이너의 ip주소로 해야한다거나 통신하는 방법이 따로 있을까요 ..? + 도커 컴포즈 depends on 이나 link를 사용하지 않을 경우 서버 컨테이너를 먼저 띄우고, 클라이언트 컨테이너를 띄울때 주는 옵션이나 이런게 있을까요 ?
풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, 배포까지) [풀스택 Part3]
도커 컴포즈 파일 작성중에 volumes에 제 로컬 디렉토리와 컨테이너에 있는 디렉토리를 마운트하는데, 제가 컨테이너에는 디렉토리 구조를 1. 이미지를 제가 만들었다면 알 수 있지만, 2. 이미지를 허브에서 가져온다면 보통 모를 것 같은데 2번과 같은 경우에는 마운트를 하려면 어떻게 해야 하나요? 예시에서 volumes: - ./mysqldata:/var/lib/mysql 이라고 했을 때, 저 혼자 한다면 저는 /var/lib/mysql에 마운트해야 한다는 사실을 모를 것 같아서요