호스트가 아닌 클라우드에서 인프라 구축할 때 방화벽 문제로 노드간 연결되지 않는 상황 발생

즉, 아래와 같은 출력으로 인해 가상 머신 클러스터를 구성할 수 없는 상태임 (aws 에서 docker-machine 생성은 여기 참고)

root@aws01:/home/ubuntu# docker swarm leave
Node left the swarm.
root@aws01:/home/ubuntu# docker swarm join --token SWMTKN-1-67inqm9tz1k8dw5r2izextx7i33m9vz46eqt926zln2vjx1x31-3yclb3lqqhradd7ay7s2u6jue 172.31.24.248:2377
Error response from daemon: Timeout was reached before node joined. The attempt to join the swarm will continue in the background. Use the "docker info" command to see the current swarm status of your node.

 

무조건 포트가 열려있는지 확인해야함 (vm 이든, host 든 클러스터를 구성할 호스트 OS 에서 방화벽 확인해야 한다.)

 

참고: https://stackoverflow.com/questions/38693560/docker1-12-worker-not-able-to-join-in-clusterswarm-pending

 

Docker1.12 Worker not able to join in cluster(Swarm: Pending)

Manager Version Docker version 1.12.0-rc5, build a3f2063, Worker version Docker version 1.12.0-rc5, build a3f2063. Created Swarm manger: docker swarm init --advertise-addr "172.25.30.2:4243"

stackoverflow.com

 

또한 overlay 네트워크 사용 시 도커 문서내에서는 7946과 4789 포트 개방을 필수로 하라고 되어 있음

 

 

근데 개방해도, 서브넷이 동일하지 않을 경우 호스트에서 vm을 연결한다하더라도 공인 IP 를 사용해야 함

해결방법
 

Docker swarm: 도커 스웜에서 워커/매니저 노드가 조인이 실패할 경우?

도커 스웜 환경 Versions Docker (18.09.0) Docker (1.23.2) 저번 포스트에서 도커 스웜 사용후기에 대해 다뤘었는데, 이번에 실제로 클라우드 서비스를 이용해 도커 스웜을 구축할 때 마주했던 문제에 대해 공유하고자 한다. 답은 방화벽 문제이다. 답만 빠르게 알고 가고싶다면, 문서 맨 밑으로 가면 된다. 발생문제 애초에 노드가 조인이 되지 않음. 노드가 조인이 되었는데도 불구하고, 컨테이너 배포가 이루어지지 않음. 원인파악 사실

hidekuma.github.io

  1. 같은 내부망에 있을 경우
    • 방화벽에서 해당 서버의 tcp 2377 포트를 열어준다.
  2. 같은 내부망에 있지 않을 경우
    • advertise-addr을 퍼블릭ip로 설정해준다.
    • 방화벽에서 해당 서버의 tcp 2377 포트를 열어준다.

** 실제 AWS 인스턴스의 인바운드 정책에서 2377 포트를 개방해야 한다.

$ docker swarm join --token <TOKEN> <Public IP>:2377

(여기서 서버는 호스트자체를 manager node로 두었음)

 

 

$ docker-compose stop
Stopping backend_nginx_1     ... error
Stopping backend_djangoapp_1 ... error

ERROR: for backend_nginx_1  b'cannot stop container: ecd5eab98011da7d79fa45137b6f9af8365dc1cfc4f13338b3bc51d3bb5614d4: Cannot kill container ecd5eab98011da7d79fa45137b6f9af8365dc1cfc4f13338b3bc51d3bb5614d4: unknown error after kill: runc did not terminate sucessfully: container_linux.go:388: signaling init process caused "permission denied"\n: unknown'

 

 

흐 시발ㅠㅠ

 

https://stackoverflow.com/questions/47223280/docker-containers-can-not-be-stopped-or-removed-permission-denied-error

 

Docker Containers can not be stopped or removed - permission denied Error

Issue: Can not stop docker containers, whenever I try to stop containers I get the following Error message, ERROR: for yattyadocker_web_1 cannot stop container:

stackoverflow.com

 

시스템관리자 AppArmor가 일을 똑바로 안해서 발생;

아래는 해결책

For anyone that does not wish to completely purge AppArmor.
Check status: sudo aa-status
Shutdown and prevent it from restarting: sudo systemctl disable apparmor.service --now
Unload AppArmor profiles: sudo service apparmor teardown
Check status: sudo aa-status
You should now be able to stop/kill containers.

 

 

'DevOps > Docker' 카테고리의 다른 글

AWS + docker-machine 사용 시 주의사항  (0) 2019.06.08
docker swarm 사용 시 manager mode 전환할 때 주의  (0) 2019.06.08
docker-machine 명령어  (0) 2019.05.29
docker swarm 명령어  (0) 2019.05.22
docker 명령어  (0) 2019.05.22

 

vm 깔고, docker swarm 사용할 때 이미 host 가 manager node 일 경우 아래 순서로 명령어를 수행

 

HOST$ docker swarm leave

VM$ docker swarm init

 

하면, 아래처럼 기존 컨테이너가 실행중인데 사라지는 현상 (데몬이 실행중인 컨테이너를 잡지 못함)

 


$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES

 

$ ps -ef | grep docker
root     11775     1  0 18:24 ?        00:00:01 dockerd -G docker --exec-root=/var/snap/docker/384/run/docker --data-root=/var/snap/docker/common/var-lib-docker --pidfile=/var/snap/docker/384/run/docker.pid --config-file=/var/snap/docker/384/config/daemon.json --debug
root     11868 11775  0 18:24 ?        00:00:00 docker-containerd --config /var/snap/docker/384/run/docker/containerd/containerd.toml
root     12136     1  0 18:24 ?        00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root     12730  6303  0 18:27 pts/2    00:00:00 grep --color=auto docker
root     15881 12110  0 Jun05 ?        00:00:03 containerd-shim -namespace moby -workdir /var/lib/containerd/io.containerd.runtime.v1.linux/moby/ce80ad93f1eb809a35d7fc32ebf0647444b8e1a9dc6f874fdd4ac7af040626d8 -address /run/containerd/containerd.sock -containerd-binary /usr/bin/containerd -runtime-root /var/run/docker/runtime-runc
root     15981 12110  0 Jun05 ?        00:00:03 containerd-shim -namespace moby -workdir /var/lib/containerd/io.containerd.runtime.v1.linux/moby/dc1cf4cc07a493748ee3b5f9b30a04fa0baac9403ddf30f7d4c140f8edf53579 -address /run/containerd/containerd.sock -containerd-binary /usr/bin/containerd -runtime-root /var/run/docker/runtime-runc
root     16138 12110  0 Jun05 ?        00:00:03 containerd-shim -namespace moby -workdir /var/lib/containerd/io.containerd.runtime.v1.linux/moby/ecd5eab98011da7d79fa45137b6f9af8365dc1cfc4f13338b3bc51d3bb5614d4 -address /run/containerd/containerd.sock -containerd-binary /usr/bin/containerd -runtime-root /var/run/docker/runtime-runc


라고 뜨는 경우 즉, 컨테이너가 실행중인데 없다고 뜨는 경우 원래 매니저 노드에서 leave 명령어로 스왐모드 해제해도 위의 상황이 반복

 

+ docker service ls 또는 docker node ls 처럼 manager node 일 때 사용가능한 명령어도 사용못하는 상태

 

ㅅㅂ

 

스왐을 실행하고 있는 프로세스가 아직 있기 때문이다.

따라서 2377 포트를 사용하고 있는 프로세스를 찾아서 죽이면 된다.

 

$ sudo ss --tcp --listening --processes --numeric | grep ":2377"

$ sudo readlink -f /proc/<PID>/exe      또는 $ kill -9 <PID>

 

참고: https://stackoverflow.com/questions/53547308/docker-swarm-init-fails-address-already-in-use

 

Docker Swarm Init Fails: Address already in use

I've been going through the docker tutorial at https://docs.docker.com/v17.12/get-started/part3/#take-down-the-app-and-the-swarm and am up to the part where we're setting up our initial docker swar...

stackoverflow.com

 

이제 된다;

 

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
ecd5eab98011        nginx:1.13          "nginx -g 'daemon of…"   3 weeks ago         Up 2 days           0.0.0.0:80->80/tcp       backend_nginx_1
dc1cf4cc07a4        backend_djangoapp   "./ready.sh"             3 weeks ago         Up 2 days           8000/tcp                 backend_djangoapp_1
ce80ad93f1eb        test_db             "docker-entrypoint.s…"   6 weeks ago         Up 2 days           0.0.0.0:5432->5432/tcp   database1

 

 

으후; 심장아파

 

 

'DevOps > Docker' 카테고리의 다른 글

AWS + docker-machine 사용 시 주의사항  (0) 2019.06.08
docker container stop 안될 때 또는 docker-compose down 안될 때  (0) 2019.06.08
docker-machine 명령어  (0) 2019.05.29
docker swarm 명령어  (0) 2019.05.22
docker 명령어  (0) 2019.05.22

 

먼저, virtualbox 가 설치되어 있어야 한다.

$ sudo sh -c 'echo "deb http://download.virtualbox.org/virtualbox/debian xenial contrib" >> /etc/apt/sources.list.d/virtualbox.list'

$ wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add - wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add - sudo apt-get update

$ sudo apt-get install virtualbox-5.2

https://stackoverflow.com/questions/45748162/docker-error-with-pre-create-check-we-support-virtualbox-starting-with-version

 

docker Error with pre-create check: "We support Virtualbox starting with version 5

I'm trying to create docker machine host using the following command in fedora OS version 25. docker-machine create -driver=virtualbox host01 I get below error while executing the command. Error...

stackoverflow.com

 

 

$ docker-machine

 

-----------------------------------------------------------------------------------------

Usage: docker-machine [OPTIONS] COMMAND [arg...]

Create and manage machines running Docker.

Version: 0.16.0, build 702c267f

Author:
  Docker Machine Contributors - <https://github.com/docker/machine>

Options:
  --debug, -D                                                        Enable debug mode
  --storage-path, -s "/root/.docker/machine"       Configures storage path [$MACHINE_STORAGE_PATH]
  --tls-ca-cert                                                       CA to verify remotes against [$MACHINE_TLS_CA_CERT]
  --tls-ca-key                                                        Private key to generate certificates [$MACHINE_TLS_CA_KEY]
  --tls-client-cert                                                  Client cert to use for TLS [$MACHINE_TLS_CLIENT_CERT]
  --tls-client-key                                                   Private key used in client TLS auth [$MACHINE_TLS_CLIENT_KEY]
  --github-api-token                                Token to use for requests to the Github API [$MACHINE_GITHUB_API_TOKEN]
  --native-ssh                                           Use the native (Go-based) SSH implementation. [$MACHINE_NATIVE_SSH]
  --bugsnag-api-toke                               BugSnag API token for crash reporting [$MACHINE_BUGSNAG_API_TOKEN]
  --help, -h                                                            show help
  --version, -v                                                        print the version

Commands:
  active                Print which machine is active
  config                Print the connection config for machine
  create                Create a machine
  env                    Display the commands to set up the environment for the Docker client
  inspect               Inspect information about a machine
  ip                       Get the IP address of a machine
  kill                      Kill a machine
  ls                        List machines
  provision            Re-provision existing machines
  regenerate-certs      Regenerate TLS Certificates for a machine
  restart                Restart a machine
  rm                      Remove a machine
  ssh                     Log into or run a command on a machine with SSH.
  scp                     Copy files between machines
  mount                Mount or unmount a directory from a machine with SSHFS.
  start                   Start a machine
  status                 Get the status of a machine
  stop                   Stop a machine
  upgrade             Upgrade a machine to the latest version of Docker
  url                      Get the URL of a machine
  version              Show the Docker Machine version or a machine docker version
  help                  Shows a list of commands or help for one command

Run 'docker-machine COMMAND --help' for more information on a command.

-----------------------------------------------------------------------------------------

 

 

 

+ Recent posts