Docker-контейнер работает, но его процесс завершен - PullRequest
0 голосов
/ 03 января 2019

Я запускаю свое машинописное приложение в док-контейнере.Иногда случается, что приложение завершается, но контейнер все еще находится в рабочем состоянии.Как это вообще возможно ?Я думал, что забыл поймать отклоненное обещание или забыл закрыть поток, но в этом случае docker top myContainer скажет мне, что основной процесс все еще выполняется, верно?

Docker ps:

docker ps
5c63b442af79        filipxxx/v2x_communication   "npm run start ether…"   2 hours ago         Up 2 hours        vehicle2

Верх Docker:

docker top vehicle2
UID                 PID                 PPID                C                   STIME  

Проверка Docker:

docker inspect vehicle2
[
    {
        "Id": "5c63b442af799b8ff3b83d7c53e1ccfd2a290d469b58b10970217aa987e963f9",
        "Created": "2019-01-03T13:26:50.947651153Z",
        "Path": "npm",
        "Args": [
            "run",
            "start",
            "ethereum",
            "172.21.0.3:8545",
            "run-producer",
            "2",
            "100",
            "0xfb69fd63952d243fc235b91ff7bc49f9cd4a31f8"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 46799,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2019-01-03T13:33:52.860979672Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
...

Удивительно, но при запуске docker exec -i vehicle2 echo 'hello world' он возвращает мне: cannot exec in a stopped state: unknown.

Ниже приведен файл Docker, который я использовал для создания образа.

FROM node:8

WORKDIR /v2x_communication
COPY . /v2x_communication

RUN npm install && npm run build

ENTRYPOINT ["npm", "run"]

Даже если я запускаю Docker Stop Vehicle2, он успешно завершается, но транспортное средство2 по-прежнему отображается в docker ps и docker inspect vehicle2все еще говорит, что он в рабочем состоянии.

Информация о докере:

Containers: 50
 Running: 48
 Paused: 0
 Stopped: 2
Images: 150
Server Version: 18.09.0
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: active
 NodeID: sah8xlcjnxbq13uofznqrjs6e
 Is Manager: false
 Node Address: 10.132.0.5
 Manager Addresses:
  10.132.0.2:2377
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: c4446665cb9c30056f4998ed953e6d4ff22c7c39
runc version: 4fc53a81fb7c994640722ac585fa9ca548971871
init version: fec3683
Security Options:
 apparmor
 seccomp
  Profile: default
Kernel Version: 4.15.0-1026-gcp
Operating System: Ubuntu 18.04.1 LTS
OSType: linux
Architecture: x86_64
CPUs: 48
Total Memory: 94.41GiB
Name: vehicle-fleet-big-1
ID: OAVG:6QVR:EH3F:OYNO:ADC4:QDAN:R2AF:LSSV:2VSI:IJWJ:PJH2:LJVP
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false
Product License: Community Engine

WARNING: No swap limit support

1 Ответ

0 голосов
/ 03 января 2019

Либо вы обнаружили ошибку, либо что-то удерживает контейнер открытым. Ближайшая проблема, которую я могу найти, довольно старая # 30927 . Я бы начал изучать журналы dockerd и OS, чтобы выяснить, есть ли там какие-либо ошибки. Для dockerd это journalctl -u docker для системных сред. А в ОС все, что находится в / var / log for, было бы хорошо для начала отладки. Потенциальные блокираторы, которые я могу себе представить, включают:

  • неудачный процесс подкладки, возможно, runc застрял в состоянии зомби
  • монтирование, которое не будет выпущено, возможно, что-то пытается прочитать файлы в файловой системе Docker
  • Команды, запрашивающие контейнер, который не вышел, возможно, что-то извлекает много журналов, которые зависли в ожидании очистки канала / буфера

Если вы ничего не можете найти, проблема в moby / moby repo может быть уместной, но без каких-либо сообщений об ошибках, указывающих на причину или способ воспроизведения, ее будет трудно исправить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...