인프런 커뮤니티 질문&답변

lettgo님의 프로필 이미지

작성한 질문수

Jenkins를 이용한 CI/CD Pipeline 구축

WSL+ubuntu) ssh서버 내 도커실행 문제해결법 공유

22.11.18 13:21 작성

·

2K

0

운영체제 : window에서 WSL통한 ubuntu설치하여 사용중

문제상황: ssh 접속후 systemctl으로 docker start 시에 에러발생하며 빠져나옴.

에러코드:

failed to start daemon: Error initializing network controller: error obtaining controller instance: failed to create NAT chain DOCKER: iptables failed: iptables --wait -t nat -N DOCKER: iptables v1.8.4 (nf_tables): CHAIN_ADD failed (No such file or directory): chain PREROUTING

(exit status 4)

처음에는 wsl의 낮은 커널버전이 문제인가했는데 이 방법으로는 해결못했고,

더 찾아보니 centos8 에서는 iptables가 아닌 firewalld, nfttable(방화벽기능)에서 port관리를 하며, docker version이 20.10.5 이상부터는 firewalld가 실행, 미실행 상관없이 도커실행에 문제가 생길 수 있다는 블라블라~의 글이 있었습니다.(팩트인지는모름)

그래서 시도차원에서 centos8가 아니라 centos7 이미지를 기반으로하는 dockerfile을 만들었고,

이미지를 생성 후

  • docker run --privileged --name docker-server -itd -p 10022:22 -p 8081:8080 -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup <image> /usr/sbin/init

    명령어로 컨테이너를 돌리니 ssh서버 내부에 도커가 실행되었습니다.

 

이렇게해서 추후실습에 어떤영향이 있을지는 모르겠지만, 일단 저는 이렇게하고 진행해보려합니다.

문제가생기면 그때해결..!

 

Dockerfile 내용

FROM centos:7
#FROM centos:8

RUN yum -y update; yum clean all
RUN yum -y install systemd; yum clean all;
# (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done); \
# rm -f /lib/systemd/system/multi-user.target.wants/*;\
# rm -f /etc/systemd/system/*.wants/*;\
# rm -f /lib/systemd/system/local-fs.target.wants/*; \
# rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
# rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
# rm -f /lib/systemd/system/basic.target.wants/*;\
# rm -f /lib/systemd/system/anaconda.target.wants/*;

VOLUME ["/sys/fs/cgroup"]

# RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-Base.repo
# RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-Base.repo
RUN yum update

# install sshd
RUN yum install -y epel-release
RUN yum install -y openssh-server \
&& sed 's/#PermitRootLogin yes/PermitRootLogin yes/' -i /etc/ssh/sshd_config \
&& echo 'root:P@ssw0rd' | chpasswd \
&& ssh-keygen -f /etc/ssh/ssh_host_rsa_key -N '' -t rsa
RUN yum install -y openssh-clients

RUN yum update -y
RUN yum install -y iptables
# RUN yum install -y docker docker-registry
# RUN yum install -y docker
# RUN yum install -y docker-ce-cli 
# RUN yum install -y containerd.io
# RUN sed -i -e 's/overlay2/vfs/g' /etc/sysconfig/docker-storage

RUN yum install -y yum-utils
RUN yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
RUN yum install -y docker-ce docker-ce-cli containerd.io
# RUN systemctl start docker
RUN yum install -y ncurses
RUN yum install -y git

WORKDIR /root
COPY ./Dockerfile ./Dockerfile

EXPOSE 22

ENTRYPOINT ["/sbin/init", "systemctl", "start", "sshd"]

답변 1

0

Dowon Lee님의 프로필 이미지
Dowon Lee
지식공유자

2022. 11. 21. 07:50

안녕하세요, 이도원입니다.

원래, Windows에서 사용될 Dockerfile들은 CentOS 7을 Base로 생성되었었는데, MacOS M1 버전과 호환되게 만들려고 하다보니, CentOS8로 변경되어 생성되었습니다. CentOS에 따른 이미지 생성은 수업이 상관없으며, 필요한 패키지나 서비스가 있을 경우 yum 명령어로 실해하시어 처리해 주시면 됩니다.

감사합니다.

lettgo님의 프로필 이미지

작성한 질문수

질문하기