Попытка запустить archlinux образ docker-compose, но он просто завершается с кодом 0 - PullRequest
1 голос
/ 28 апреля 2019

Я пытаюсь запустить образ archlinux, а затем добавить тома, чтобы проверить свои скрипты при настройке Arch Linux. Но я застрял с началом сочинения. Если я перезагружаюсь: всегда просто перезагружается все время, когда я закомментирую это, тогда это дает мне выход с кодом 0.

version: "3.7"

services:
  arch:
    image: archlinux/base
    # restart: always

Я начинаю сочинять с

$docker-compose up

и вывод

Creating network "docker-compose_default" with the default driver
Creating docker-compose_arch_1 ... done
Attaching to docker-compose_arch_1
docker-compose_arch_1 exited with code 0

Чего не хватает?

Любая помощь очень ценится. Я застрял с этой проблемой довольно долго.

Ответы [ 2 ]

1 голос
/ 28 апреля 2019

Базовый образ, который вы используете в данный момент , выполняет /usr/bin/bash в качестве команды по умолчанию , которая требует выделения tty для продолжения работы (или вам придется изменить команду на любую долгосрочную задачу).

Посмотрим, что в первую очередь происходит с самим докером.

Запуск контейнера в интерактивном режиме работает, как и ожидалось:

$ docker run -it --rm archlinux/base
[root@6642c519e328 /]# more /etc/issue 
Arch Linux \r (\l)

[root@6642c519e328 /]# exit

Теперь давайте попробуем запустить контейнер в фоновом режиме.:

$ docker run -d --name testarch archlinux/base
915ff11b0c93bd795eb62d37cd2d9928638560d9accfb2e5ba061b3ef19c0235
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
$ # Hoho, it's not running
$ docker ps -a
CONTAINER ID        IMAGE                                               COMMAND                 CREATED             STATUS                     PORTS               NAMES
915ff11b0c93        archlinux/base                                      "/usr/bin/bash"         8 seconds ago       Exited (0) 7 seconds ago                       testarch
$ docker rm testarch 
testarch

Если мы сделаем то же самое с распределением tty:

$ docker run -d --tty --name testarch archlinux/base
d160a3d7e18c3d094f47577b448a11808eb30ce7ba8fad4cde882818f248f207
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
d160a3d7e18c        archlinux/base      "/usr/bin/bash"     5 seconds ago       Up 4 seconds                            testarch
$ # Tada ! It runs, we can now attach to it.
$ docker exec -it testarch bash
[root@d160a3d7e18c /]# more /etc/issue
Arch Linux \r (\l)

[root@d160a3d7e18c /]# exit
$ docker rm -f testarch

Теперь вернемся к вашему docker-compose.yml.На текущем этапе тестирования вам нужно выделить tty (который вы сможете удалить позже, если вам больше не нужен cmd / entry-point).

version: "3.7"

services:
  arch:
    image: archlinux/base
    tty: true

В настоящее время bashКоманда не отправляет ничего в журнал контейнера.Я начну в отдельном режиме, поэтому команда возвращается после запуска контейнера, и я могу использовать тот же терминал (запустите второй терминал, если вы все еще хотите запустить docker-compose в режиме переднего плана)

$ pwd
/tmp/slack_test
$ docker-compose up -d
Creating network "slack_test_default" with the default driver
Creating slack_test_arch_1 ... done
$ docker-compose exec arch bash
[root@10f138d98782 /]# more /etc/issue 
Arch Linux \r (\l)

[root@10f138d98782 /]# exit
exit
$ docker-compose down
Stopping slack_test_arch_1 ... done
Removing slack_test_arch_1 ... done
Removing network slack_test_default
$ 
0 голосов
/ 28 апреля 2019

, потому что archlinux имеет CMD[/usr/bin/bash] https://github.com/archlinux/archlinux-docker/blob/master/Dockerfile, что означает, что вы должны указать любую долгосрочную задачу, чтобы позволить контейнеру работать, иначе он выйдет, например, вы можете передать аргумент bash, такой как цикл while, чтобы он продолжал работать.

version: "3.7"

services:
  arch:
    image: archlinux/base
    command:
     - "while(true); do sleep 5; done"
...