如何在Lubuntu启动时自动运行Docker Compose?

4

我在旧电脑上安装了Lubuntu 21.04,一切都是最新的。我安装了Docker和Docker-Compose:

sudo apt install docker docker-compose
sudo systemctl enable --now docker

接下来,在主目录中创建名为web的文件夹,我的项目将存放在其中。文件夹~/web的结构如下:

.
├── docker-compose.yml
├── dockerfiles
│   ├── lg4
│   ├── test
│   └── test2
└── www
    ├── lg4
    ├── test
    └── test2

所有服务在 docker-compose.yml 文件中都有 restart 指令:

version: '3.7'

volumes:
    mysql-volume:
networks:
    app-shared: 
        driver: bridge
    web_app-shared:
        external: true
services:
    php-httpd-lg4:
        restart: always
        build:
            args:
                user: lg4
                uid: 1000
            context: ./dockerfiles/lg4/
        ports:
            - 80:80
        volumes:
            - "./www/lg4:/var/www/html"
        links:
            - database
        networks:
            - app-shared
            - web_app-shared
    php-httpd-test:
        restart: always
        build:
            args:
                user: test
                uid: 1000
            context: ./dockerfiles/test/
        ports:
            - 82:80
        volumes:
            - "./www/test:/var/www/html"
        links:
            - database
        networks:
            - app-shared
            - web_app-shared
    php-httpd-test2:
        restart: always
        build:
            args:
                user: test
                uid: 1000
            context: ./dockerfiles/test2/
        ports:
            - 81:80
        volumes:
            - "./www/test2:/var/www/html"
        links:
            - database
        networks:
            - app-shared
            - web_app-shared
    database:
        restart: always
        image: mysql:5.7
        restart: always
        volumes:
            - mysql-volume:/var/lib/mysql
        ports:
            - 3306:3306
        networks:
            - app-shared
            - web_app-shared
        environment:
            TZ: "Europe/Moskow"
            MYSQL_ALLOW_EMPTY_PASSWORD: "no"
            MYSQL_ROOT_PASSWORD: "root"
            MYSQL_USER: 'admin'
            MYSQL_PASSWORD: 'admin'
            MYSQL_DATABASE: 'lg4'
    phpmyadmin:
        restart: always
        image: phpmyadmin/phpmyadmin
        links:
            - 'database:db'
        ports:
            - 8081:80
        environment:
            UPLOAD_LIMIT: 300M
        networks:
            - app-shared
            - web_app-shared

当我在~/web目录下运行命令sudo docker-compose up -d时,一切都正常。但是如何在系统启动时自动开始所有这些操作而不需要每次在终端中键入任何命令呢?

2个回答

2
是的,Docker具有重新启动策略,例如docker run --restart=always将处理此问题。这也可以在compose.yml配置文件中使用restart: always来实现。
为了启用重新启动策略,您需要在执行docker run时使用--restart参数。
在我的情况下,我决定使用unless-stopped参数的--restart标志,这样我的容器会在崩溃或甚至重启后重新启动。以下是我必须使用的命令示例:
docker run -dit --restart unless-stopped httpd

如果您有一个已经在运行的容器,并且想要更改重启策略,可以使用docker update命令进行更改。
docker update --restart unless-stopped container_id

欲了解更多信息,请查看官方文档:

https://docs.docker.com/config/containers/start-containers-automatically/

(Note: 该文档为Docker容器自动启动的相关配置说明,详细介绍了如何在容器启动时运行指定命令或脚本等操作。)

但是我该如何找到我的容器名称呢?我使用docker-compose启动我的容器 - 在放置docker-compose.yml文件的文件夹中的终端中键入“sudo docker-compose up -d”。我从未直接使用docker来运行任何东西。 - autumnrustle
docker ps 用于获取所有正在运行的 Docker 容器名称和 ID。 - Rakesh Gadhwal

1
我认为,如果您使用docker-compose启动容器,则所选答案实际上并不是真正正确的。那个答案会启动Docker,但对于您的docker-compose(我有几个)容器没有任何作用。
我所做的是:
1. 创建一个非常简单的启动脚本 #!/bin/bash cd Docker-compse-project docker-compose up 2. 为停止脚本执行相同操作
3. 您可以将它们保存在任何地方,但我会将它们保存在与docker-compose.yml相同的位置
4. 现在,在现代ubuntu映像中,您可以在.etc.systemd/system中创建一个服务映像,我为主要服务命名为MyWebApp 因此,MyWebApp.service如下所示:
[Unit]
Description=My Web Application
After=network.target

[Service]
Type=forking
User=MyUserToRun
Group=MyGroupToRun

ExecStart=/path/to/startScript
ExecStop=/path/to/stopScript

[Install]
WantedBy=multi-user.target
  1. 现在您可以启用您的服务

    sudo systemctl enable MyWebApp.service

  2. 您可以像平常一样启动和停止服务


这里有一个很好的Gist,使用这种方法进行了有益的评论。点击此处查看。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接