Контейнер Docker не запускается с systemctl

Я только начал проверять coreos

Я пытался настроить экземпляры докеров redis и mysql, но без особого успеха.

Сначала я ожидал, что все будет работать при запуске из коробки, но оказалось, что это не так.

Итак, основываясь на этой документации по systemd на coreos сайт, я решил попробовать это, чтобы запустить свой докер

cd /etc/systemd/system

sudo systemctl enable redis.service
$ sudo systemctl start redis.service

Это не сработало.

Я использовал события докера для отслеживания его инициализации.

docker event &

Я не уверен, что я, вероятно, пропустил ..

Вот мой файл конфигурации облака

#cloud-config
hostname: user1
# include one or more SSH public keys
ssh_authorized_keys:
  - ssh-rsa....
users:
  - name: user2
    passwd: temp123
    groups:
      - sudo
      - docker
    ssh-authorized-keys:
      - ssh-rsa....
coreos:
  etcd2:
    #generate a new token for each unique cluster from https://discovery.etcd.io/new?size=#{number_instances}
    discovery: https://discovery.etcd.io/fdadfadjskd546887878kfksdjfds
    # multi-region and multi-cloud deployments need to use 1.1.1.1
    advertise-client-urls: http://1.1.1.1:2379
    initial-advertise-peer-urls: http://2.2.2.2:2380
    # listen on both the official ports and the legacy ports
    # legacy ports can be omitted if your application doesn't depend on them
    listen-client-urls: http://0.0.0.0:2379,http://0.0.0.0:4001
    listen-peer-urls: http://2.2.2.2:2380,http://2.2.2.2:7001
  fleet:
    public-ip: 1.1.1.1
  flannel:
    interface: 3.3.3.51/23
  units:
    - name: systemd-networkd
      command: stop
    - name: 00-static.network
      runtime: true
      content:   "[Match]\n\
        Name=ens19\n\
        [Network]\n\
        Address=3.3.3.3/23\n\
        Gateway=3.3.3.255\n\
        DNS=8.8.8.8\n\
        DNS=8.8.4.4  \n"
    - name: systemd-networkd
      command: start
    - name: etcd2.service
      command: start
    - name: fleet.service
      command: start
    - name: redis.service
      command: start
      enable: true
      content: "[Unit]\n\
        Description=Redis Server Docker Container\n\
        After=docker.service\n\
        Requires=docker.service\n\
        [Service]\n\
        TimeoutStartSec=0 \n\
        EnvironmentFile=/etc/environment\n\
        ExecStartPre=-/usr/bin/docker kill %p\n\
        ExecStartPre=-/usr/bin/docker rm %p\n\
        ExecStartPre=/usr/bin/docker pull redis:latest \n\
        ExecStart=/usr/bin/docker run --name=redis --detach=true --publish=6379:6379 redis \n\
        ExecStop=/usr/bin/docker stop redis \n\
        [Install] \n\
        WantedBy=multi-user.target \n"
    - name: mysql.service
      command: start
      enable: true
      content: "[Unit]\n\
        Description=MySQL Server Docker Container\n\
        After=docker.service\n\
        Requires=docker.service\n\
        [Service]\n\
        TimeoutStartSec=0 \n\
        EnvironmentFile=/etc/environment\n\
        ExecStartPre=-/usr/bin/docker kill %p\n\
        ExecStartPre=-/usr/bin/docker rm %p\n\
        ExecStartPre=/usr/bin/docker pull mysql:latest \n\
        ExecStart=/usr/bin/docker run --name=mysql --env MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} --env MYSQL_USER=${MYSQL_USER} --env MYSQL_PASSWORD=${MYSQL_PASSWORD} --env MYSQL_DATABASE=${MYSQL_DATABASE} --detach --publish 3306:3306 --volume=/path/to/dumps/:/dumps/ mysql\n\
        ExecStop=/usr/bin/docker stop mysql\n\
        [Install] \n\
        WantedBy=multi-user.target \n"
write_files:
  - path: /etc/environment
    permissions: 0644
    content: "\nMYSQL_USER='user1'\n\
      MYSQL_DATABASE='db1'\n\
      MYSQL_CONTAINER_NAME='mysql'\n\
      MYSQL_ROOT_PASSWORD=$(cat /dev/urandom | LC_CTYPE=C tr -dc 'a-zA-Z0-9' | fold -w 32 | sed 1q) \n"

person Ikenna    schedule 23.03.2016    source источник
comment
Вам нужно посмотреть (или опубликовать) журналы systemd для службы. Если Redis запускается неправильно, это будет отображаться в журналах: journalctl -u redis.service Кроме того, поделитесь информацией о событиях Docker.   -  person Rob    schedule 23.03.2016


Ответы (1)


Вы запускаете контейнер Redis в автономном режиме, поэтому утилита Docker запускает контейнер, а затем завершает работу. С точки зрения systemd это выглядит так, как будто контролируемый процесс завершился, поэтому systemd выполняет скрипт ExecStop, который в вашем случае останавливает контейнер redis.

Вам нужно поддерживать процесс в рабочем состоянии, чтобы systemd не пытался остановить или перезапустить ваш контейнер. Один из способов добиться этого — удалить флаг --detach. Вы также можете использовать KillMode=none, чтобы systemd не отправлял SIGTERM утилите docker, а вместо этого выполнял только ExecStop.

[Unit]
Requires=docker.service
After=docker.service

[Service]
TimeoutStartSec=0
KillMode=none
Restart=always
RestartSec=5s


ExecStartPre=-/usr/bin/docker kill %p
ExecStartPre=-/usr/bin/docker rm -v %p

ExecStart=/usr/bin/docker --name=redis --publish=6379:6379 redis

ExecStop=/usr/bin/docker stop %p
ExecStopPost=-/usr/bin/docker stop %p
person Bobelev    schedule 18.04.2016