如何在 vps 中使用 Docker 容器?

问题描述 投票:0回答:1

在为我的项目推荐它后,我最近购买了一个 vps。我想将一个简单的 golang 应用程序与一个 Rest api 端点部署到我的服务器。我对它进行了 docker 化并将其放在我的 vps 上,然后尝试将其设为自动运行的服务 - 这是服务文件:

Description=Portfolio Backend

[Service]
ExecStart=/snap/bin/docker run -d -p 8080:8080 portfoliobackend
Restart=always
User=root
Group=root
WorkingDirectory=/go/src/portfolio2023

[Install]
WantedBy=multi-user.target

问题是,当我查看状态时,我收到一条错误消息,告诉我指定的目录是错误的:

    root@35:/# systemctl daemon-reload
systemctl restart portfoliobackend.service
root@35:/# systemctl status portfoliobackend.service
× portfoliobackend.service - Portfolio Backend
     Loaded: loaded (/etc/systemd/system/portfoliobackend.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Tue 2024-01-23 09:10:07 UTC; 3s ago
    Process: 100407 ExecStart=/snap/bin/docker run -d -p 8080:8080 portfoliobackend (code=exited, status=200/CHDIR)
   Main PID: 100407 (code=exited, status=200/CHDIR)
        CPU: 1ms

Jan 23 09:10:07 35.185.205.92.host.secureserver.net systemd[1]: portfoliobackend.service: Main process exited, code=exited, status=200/CHDIR
Jan 23 09:10:07 35.185.205.92.host.secureserver.net systemd[1]: portfoliobackend.service: Failed with result 'exit-code'.
Jan 23 09:10:07 35.185.205.92.host.secureserver.net systemd[1]: portfoliobackend.service: Scheduled restart job, restart counter is at 5.
Jan 23 09:10:07 35.185.205.92.host.secureserver.net systemd[1]: Stopped Portfolio Backend.
Jan 23 09:10:07 35.185.205.92.host.secureserver.net systemd[1]: portfoliobackend.service: Start request repeated too quickly.
Jan 23 09:10:07 35.185.205.92.host.secureserver.net systemd[1]: portfoliobackend.service: Failed with result 'exit-code'.
Jan 23 09:1

我想问这是否是最好的方法?有没有更好的替代方法? 谢谢您的帮助!

docker go deployment vps
1个回答
0
投票
  1. 您需要检查的第一件事是,如果您使用以下命令从命令行运行它,您的 docker 是否正常工作: /snap/bin/docker run -p 8080:8080 PortfolioBackend
  2. WorkingDirectory 指的是你的主机,在上面的例子中这显然是一个不必要的设置

至于使用方式,是的,这个方法还是蛮管用的,也可以编译成二进制文件,通过systemctl来运行。

对于你的情况我会这样做:

[Unit]
Description=Portfolio Backend
After=snap.docker.dockerd.service
Requires=snap.docker.dockerd.service

[Service]
TimeoutStartSec=0
Restart=always
ExecStartPre=-/snap/bin/docker exec %n stop
ExecStartPre=-/snap/bin/docker rm %n
ExecStartPre=/snap/bin/docker pull portfoliobackend
ExecStart=/snap/bin/docker run --rm --name %n \
-p 8080:8080 \
portfoliobackend
ExecStop=/snap/bin/docker exec %n stop

[Install]
WantedBy=multi-user.target

在这种情况下,您的容器将在启动前从 docker 注册表(docker pull)更新,并在停止后删除。 如果您不发布容器,请从此配置中删除 ExecStartPre=/snap/bin/docker pull PortfolioBackend

© www.soinside.com 2019 - 2024. All rights reserved.