문제 해결 / 컨테이너가 정상적으로 실행되지 않음
1. Docker Stack 환경에서 컨테이너가 반복적으로 재시작됩니다
이 문제는 일반적으로 구성, 방화벽, 각종 화이트리스트 구성이 올바르지 않아 발생합니다.
구체적인 증상은 다음과 같습니다.
- 브라우저로 페이지를 열 수 없습니다
sudo docker ps -a 명령으로 컨테이너 목록을 확인하면 컨테이너가 계속 재시작되고 있습니다
- 배포 서버 로컬에서
curl http://localhost:8088 실행 시 curl: (7) Failed to connect to localhost port 8088: Connection refused 오류가 반환됩니다
- 로그 파일에 오류 스택 정보가 계속 출력됩니다
가능한 원인 및 해결 방법:
| 가능한 원인 |
해결 방법 |
| 구성을 수동으로 수정했지만 구성에 오류가 있음 |
수정한 구성 파일을 확인하고 YAML 문법, 데이터베이스 연결 정보가 올바른지 확인 |
| 구성을 수정하여 외부 서버를 지정했지만 실제로 네트워크가 연결되지 않음 |
방화벽, Alibaba Cloud 보안 그룹 구성, 데이터베이스 연결 화이트리스트 등 구성을 확인 |
| 운영 체제와 호환성 문제가 있음 |
아래 운영 체제와 호환성 문제 참조 |
| Redis가 현재 시스템의 page size를 지원하지 않음 |
아래 Redis가 현재 시스템의 page size를 지원하지 않음 참조 |
운영 체제와 호환성 문제
docker logs {Server 컨테이너 ID}를 사용하여 다음과 같은 오류 또는 유사한 오류가 발견되면:
| Text Only |
|---|
| node[9]: ../src/node_platform.cc:61:std::unique_ptr<long unsigned int> node::WorkerThreadsTaskRunner::DelayedTaskScheduler::Start(): Assertion `(0) == (uv_thread_create(t.get(), start_thread, this))' failed.
1: 0xb57f90 node::Abort() [node]
2: 0xb5800e [node]
3: 0xbc915e [node]
4: 0xbc9230 node::NodePlatform::NodePlatform(int, v8::TracingController*, v8::PageAllocator*) [node]
5: 0xb1b3d1 node::InitializeOncePerProcess(int, char**, node::InitializationSettingsFlags, node::ProcessFlags::Flags) [node]
6: 0xb1bc89 node::Start(int, char**) [node]
7: 0x7f2ca389fd90 [/lib/x86_64-linux-gnu/libc.so.6]
8: 0x7f2ca389fe40 __libc_start_main [/lib/x86_64-linux-gnu/libc.so.6]
9: 0xa93f0e _start [node]
Aborted (core dumped)
|
이는 현재 운영 체제 / 구성 요소가 Docker와 호환되지 않기 때문일 수 있습니다 (예: DataFlux Func 2.x에는 Docker 20.10.8이 포함되어 있으며 최신 버전의 운영 체제에서 문제가 발생할 수 있습니다).
다음 방법으로 해결할 수 있습니다.
Redis가 현재 시스템의 page size를 지원하지 않음
공식 Redis 이미지는 일부 ARM 버전 운영 체제에서 시작할 때 <jemalloc>: Unsupported system page size 오류가 발생합니다. 다음을 참조하세요.
2. Docker Stack 환경에서 컨테이너가 존재하지 않음
이 문제는 일반적으로 실행 환경이 올바르지 않아 발생합니다.
구체적인 증상은 다음과 같습니다.
sudo docker stack ls를 실행하면 dataflux-func가 표시됩니다
sudo docker ps -a를 실행해도 해당 컨테이너가 표시되지 않습니다
sudo docker stack ps dataflux-func --no-trunc를 실행하면 컨테이너 상태가 비정상입니다
가능한 원인 및 해결 방법:
| 가능한 원인 |
해결 방법 |
| 시스템에 설치된 Docker가 Snap 버전인 경우 |
Snap 버전 Docker를 제거하고, 공식 경로의 Docker를 재설치하거나 스크립트에 포함된 Docker를 사용하십시오 |
| 기타 |
sudo docker stack ps dataflux-func --no-trunc의 ERROR 항목으로 확인할 수 있습니다 |
대표적인 예로 no space left on device는 디스크 공간 부족을 의미합니다
3. k8s 환경에서 컨테이너가 시작되지 않음
이 문제는 일반적으로 호스트 머신 / k8s 클러스터의 문제로 인해 발생합니다.
k8s에서 다음과 같은 오류가 발생할 수 있습니다:
| Text Only |
|---|
| Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning Failed 36m kubelet Error: failed to start container "func-server": Error response from daemon: OCI runtime create failed: container_linux.go:367: starting container process caused: process_linux.go:495: container init caused: rootfs_linux.go:60: mounting "/home/cce/kubelet/pods/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/volume-subpaths/user-config/func-server/1" to rootfs at "/home/cce/docker/overlay2/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/merged/data/user-config-template.yaml" caused: no such file or directory: unknown
Warning Failed 36m kubelet Error: failed to start container "func-server": Error response from daemon: OCI runtime create failed: container_linux.go:367: starting container process caused: process_linux.go:495: container init caused: rootfs_linux.go:60: mounting "/home/cce/kubelet/pods/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/volume-subpaths/user-config/func-server/1" to rootfs at "/home/cce/docker/overlay2/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/merged/data/user-config-template.yaml" caused: no such file or directory: unknown
Warning Failed 36m kubelet Error: failed to start container "func-server": Error response from daemon: OCI runtime create failed: container_linux.go:367: starting container process caused: process_linux.go:495: container init caused: rootfs_linux.go:60: mounting "/home/cce/kubelet/pods/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/volume-subpaths/user-config/func-server/1" to rootfs at "/home/cce/docker/overlay2/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/merged/data/user-config-template.yaml" caused: no such file or directory: unknown
Normal Created 35m (x5 over 118d) kubelet Created container func-server
Warning Failed 35m kubelet Error: failed to start container "func-server": Error response from daemon: OCI runtime create failed: container_linux.go:367: starting container process caused: process_linux.go:495: container init caused: rootfs_linux.go:60: mounting "/home/cce/kubelet/pods/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/volume-subpaths/user-config/func-server/1" to rootfs at "/home/cce/docker/overlay2/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/merged/data/user-config-template.yaml" caused: no such file or directory: unknown
Normal Pulled 33m (x6 over 118d) kubelet Container image "dataflux-func.com/dataflux-func:2.7.0" already present on machine
Warning BackOff 2m8s (x157 over 36m) kubelet Back-off restarting failed container
|
특정 Func 서비스에서 다음과 같은 오류가 발생할 수 있습니다:
| Text Only |
|---|
| Traceback (most recent call last):
File "get-config.py", line 11, in <module>
CONFIG = yaml_resource.load_config(os.path.join(BASE_PATH, './config.yaml'))
File "/usr/src/app/worker/utils/yaml_resources.py", line 83, in load_config
user_config_content = _f.read()
OSError: [Errno 5] Input/output error
|
이것은 DataFlux Func의 문제가 아닙니다, 호스트 머신 / k8s 클러스터를 확인하시고, NAS 사용과 관련된 경우 NAS에 문제가 있는지도 확인하십시오.