Hi there!

I am a student studying computer science.

Domjudge

Domjudge 7.3 -4th (sudo: unable to resolve host judgedaemon0)

만능성구 2021. 9. 4. 18:52
728x90

2021.02.14 - [Domjudge] - Domjudge 7.3 - 3rd (Judgehost 연결)

 

Domjudge 7.3 - 3rd (Judgehost 연결)

1st, 2nd에서 DOMserver를 실행시키고 관리자로 로그인해보았습니다. 마지막으로 제출된 코드를 채점해주는 Judhost를 연결해주겠습니다. Docker Hub에 게시되어 있는 공식 메뉴얼에는 단일 judgehost를 실

heo-seongil.tistory.com

이전 글(3rd)에서 실행중인 domsever에 judgehost를 연결했습니다.

정상적으로 잘 실행되었습니다.

그런데 참가자가 제출한 submission에 대한 피드백에서 두가지 문장이 항상 출력되는 것을 확인하였습니다.

대회 운영에 문제가 될 부분은 전혀 없지만 참가자 입장에서 오답을 제출했을 때 자신의 코드이상이 아닌 서버의 이상이라고 생각할 수도 있기 때문에 해당 메시지가 출력 되지 않도록 해야될 것 같습니다.

 

그래서 judgehost 컨테이너를 실행할 때 로그를 다시 확인하니 이쪽에서도 출력이 되어있네요.

연결하는 과정에서 문제가 있겠구나하고 구글링을 해보았습니다.

그 결과 /etc/hostname 에 입력되어 있는 이름과 /etc/hosts 에 로컬 IP로 지정되어 있는 호스트 이름이 달라 생기는 문제로 두 곳의 호스트명을  일치시켜주면 해결할 수 있다고 합니다.

docker exec -it judgehost bash

위의 명령어로 docker container에 hosts, hostname 파일을 확인해보겠습니다.

두가지 파일이 의미하는 것을 찾아보았습니다.

먼저 hostname

호스트 네임(Hostname, NodeName)이란, 네트워크에 연결된 장치들에게 부여되는 각각의 고유한 이름

/etc/hosts

/etc/hosts 파일은 도메인 네임 주소를 해석할때 가정 먼저 참고하는 곳입니다. 캐시역할을 하며, 여기서 찾고자 하는 해당 도메인과 ip주소를 찾을 수 있으면 해당 주소를 반환합니다. 소규모 내부 네트워크에서는 해당 파일을 통해서 DNS 역할을 할 수 있습니다.

(127.0.0.1은 자기 자신을 의미하는 localhost를 의미하며, 127.0.1.1은 자신의 컴퓨터 이름을 의미합니다.)

 

 docker container의 hostname와 실제 컴퓨터이름이 같아야 되겠네요.

$ sudo docker run -it --network host --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro --name judgehost --hostname judgedaemon0 -e CONTAINER_TIMEZONE=Asia/Seoul -e DOMSERVER_BASEURL=http://3.35.210.229/ -e JUDGEDAEMON_USERNAME=judgehost -e JUDGEDAEMON_PASSWORD=judgehostpw -e DAEMON_ID=0 -e RUN_USER_UID_GID=62860 domjudge/judgehost:latest

이전에 실행 명령어를 이렇게 입력했는데 --hostname judgedaemon0 지워주시면 됩니다.

$ sudo docker run -it --network host --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro --name judgehost --hostname judgedaemon0 -e CONTAINER_TIMEZONE=Asia/Seoul -e DOMSERVER_BASEURL=http://3.35.210.229/ -e JUDGEDAEMON_USERNAME=judgehost -e JUDGEDAEMON_PASSWORD=judgehostpw -e DAEMON_ID=0 -e RUN_USER_UID_GID=62860 domjudge/judgehost:latest

관리자 페이지에서 확인해보면

hostname이 변경된 것을 확인할 수 있고 아래 사진을 보면 참가자 입장에서도 오류 메시지가 출력되지 않는 것을 확인할 수 있습니다.

이후에는 Domjudge로 부분채점하는 기능을 추가해보겠습니다.

728x90