簡體   English   中英

將程序轉換為 docker 容器

[英]Converting a program into a docker container

我正在嘗試轉換此程序:

下載JetAdvice Edge

完整的安裝指南可以在這里看到

從安裝到 linux 機器,到 Docker 容器中。

我需要多個運行實例,我在業余時間一直在使用 Docker,現在終於可以在我的工作中使用了!

當我構建它時,我已經完成了 dockerfile(我認為),它下載並安裝了它需要的東西,並且構建完成沒有問題。

但是,我無法讓 JetAdvice 程序/服務運行,我讀過,如果我想在一個容器中運行多個東西,我應該使用主管,因為 JetEdge 程序有 3 個正在運行的服務。 我正在使用它。

這是我的 dockerfile:

FROM ubuntu

MAINTAINER me

EXPOSE 33322
COPY startup.sh /opt/scripts/startup.sh
RUN apt-get update && \
    apt-get install -y apt-utils wget libunwind8 icu-devtools supervisor 
RUN mkdir -p -- /var/log/supervisor /opt/print/download /opt/print/edgeinstaller /opt/scripts

RUN wget https://app.jetadvice.com/install/edge/jetadvice-edge-linux-x64.tar -P /opt/print/download && \
    tar -xvf /opt/print/download/jetadvice-edge-linux-x64.tar -C /opt/print/edgeinstaller

RUN chmod +x /opt/print/edgeinstaller/Installer && \
    /opt/print/edgeinstaller/Installer install

RUN chmod +x /usr/bin/JetAdvice/Edge/Edge && \
    chmod +x /usr/bin/JetAdvice/Updater/Updater && \
    chmod +x /usr/bin/JetAdvice/EdgeUI/EdgeUi && \
    chmod +x /opt/scripts/startup.sh

COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf

CMD ["/opt/scripts/startup.sh"]

這是我的supervisord.conf

[supervisord]
nodaemon=true
user=root
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid

[program:JetAdvice-Edge]
command=/usr/bin/JetAdvice/Edge/Edge

[program:JetAdvice-Updater]
command=/usr/bin/JetAdvice/Updater/Updater

[program:JetAdvice-Edge-UI]
command=/usr/bin/JetAdvice/EdgeUI/EdgeUi

和 startup.sh 腳本:

#!/bin/sh
#somethingvariblehere
/usr/bin/supervisord

我嘗試了多種方式運行 JetAdvice,但我無法讓程序運行。

有關信息,這是 JedAdvice-Edge.service 文件之一:

Description=JetAdvice Edge connector service
Wants=network.target
After=syslog.target network-online.target

[Service]
Type = simple
ExecStart=/usr/bin/JetAdvice/Edge/Edge
Restart=on-failure
RestartSec=10
KillMode=process

[Install]
WantedBy=multi-user.target

如果我登錄到我的 docker 容器並嘗試運行該服務,我會收到此錯誤

root@6727e8f42044:/# service JetAdvice-Updater start
JetAdvice-Updater: unrecognized service

如果我嘗試直接運行程序,我會得到:

root@6727e8f42044:/# /usr/bin/JetAdvice/Edge/Edge
bash: /usr/bin/JetAdvice/Edge/Edge: Permission denied
root@6727e8f42044:/# ./usr/bin/JetAdvice/Edge/Edge
bash: ./usr/bin/JetAdvice/Edge/Edge: Permission denied

我嘗試在 /usr/bin/JetAdvice/Edge/Edge 上執行 chmod +x ,然后程序似乎運行了 3 秒,然后什么也沒有發生。

root@6727e8f42044:/# chmod +x /usr/bin/JetAdvice/Edge/Edge
root@6727e8f42044:/# /usr/bin/JetAdvice/Edge/Edge
root@6727e8f42044:/#

我什至不接近 linux 專家,但我無法想象我正在嘗試做的事情,無法完成。 那么我做錯了什么,下一步是什么?

JetEdge 團隊的工作 install.json 文件

{
  "InstallConfig": {
    "ApiClient": {
      "SignIn": {
        "InstallKey": "prettykeyhere",
        "DcaInstanceID": "prettyidhere"
      },
      "HttpLogging": {
        "MaxSize": 10240,
        "LogHttp": false
      },
      "Proxy": {
        "Address": "",
        "Port": 8080,
        "AutoDetect": true
      }
    },
    "ApiEndpoint": {
      "LoginBaseAddress": "https://auth.eu.edge-api.com",
      "BaseAddress": "https://dr.eu.edge-api.com",
      "ConfigBaseAddress": "https://config.eu.edge-api.com",
      "StayAliveBaseAddress": "https://p.eu.edge-api.com",
      "UpdateBaseAddress": "https://upd.eu.edge-api.com",
      "UiApiBaseAddress": "https://ui.eu.edge-api.com",
      "RangesBaseAddress": "https://ranges.eu.edge-api.com",
      "LoggerBaseAddress": "https://log.eu.edge-api.com",
      "StatusBaseAddress": "https://status.eu.edge-api.com"
    },
    "Installs": [
      {
        "Product": 1,
        "Folder": "C:\\Program Files (x86)\\JetAdvice\\Updater",
        "ServiceName": "JetAdvice-Updater",
        "ServiceExe": "Updater.dll",
        "Version": "0.4.18.0",
        "BuildRID": "win-x86",
        "Oem": 0
      },
      {
        "Product": 10,
        "Folder": "C:\\Program Files (x86)\\JetAdvice\\Edge",
        "ServiceName": "JetAdvice-Edge",
        "ServiceExe": "Edge.dll",
        "Version": "0.4.24.0",
        "BuildRID": "win-x86",
        "Oem": 0
      },
      {
        "Product": 20,
        "Folder": "C:\\Program Files (x86)\\JetAdvice\\EdgeUI",
        "ServiceName": "JetAdvice-Edge-UI",
        "ServiceExe": "EdgeUi.dll",
        "Version": "0.4.1.0",
        "BuildRID": "win-x86",
        "Oem": 0
      }
    ]
  }
}

我為測試生成的密鑰是: 4809b732-eb36-413f-8993-bd8d1f2e2942

編輯,我更新了 dockerfile,並將 startup.sh 腳本添加到 OP。

我稍微修改了您的 Dockerfile。

FROM ubuntu:20.04

EXPOSE 33322

RUN apt-get update && \
    apt-get install -y apt-utils wget libunwind8 icu-devtools supervisor 

#RUN apt-get install -y systemctl
#RUN apt-get install -y systemd

RUN mkdir -p -- /var/log/supervisor /opt/print/download /opt/print/edgeinstaller

RUN wget https://app.jetadvice.com/install/edge/jetadvice-edge-linux-x64.tar -P /opt/print/download && \
    tar -xvf /opt/print/download/jetadvice-edge-linux-x64.tar -C /opt/print/edgeinstaller && \
    chmod +x /opt/print/edgeinstaller/Installer && \
    /opt/print/edgeinstaller/Installer install
    
RUN chmod +x /usr/bin/JetAdvice/Edge/Edge
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf

CMD ["/usr/bin/supervisord"]

我添加了這一行RUN chmod +x /usr/bin/JetAdvice/Edge/Edge用於將 +x 添加到可執行文件中。

現在,當我啟動容器時,它給了我一個錯誤,它停止了supervisord /usr/share/JetAdvice/Edge/LogFiles下,您可以找到JetAdvice Edge日志,其中包含此錯誤

install.json - 缺少安裝密鑰。 (參數“安裝密鑰”)

在 EF.JA.Edge.Service.Windows.Program.<>c.b__2_3(HostBuilderContext hostContext, IServiceCollection services) 在 Microsoft.Extensions.Hosting.HostBuilder.CreateServiceProvider() 在 Microsoft.Extensions.Hosting.HostBuilder.Build() 在EF.JA.Edge.Service.Windows.Program.Main(String[] args)

我在/usr/share/JetAdvice/Edge/Config/Shared下找到了install.json文件,里面有InstallKey json 字段

{
  "InstallConfig": {
    "ApiClient": {
      "SignIn": {
        "InstallKey": "",
        "DcaInstanceID": "e5860224-12a6-429e-b931-86c50a7a5900"
      },
[..]
}

我在谷歌上找到了這個關於 JetAdvice 的 web 網站,其中說:

下載 JetAdvice Edge 並生成安裝密鑰

我沒有帳戶,但我想您必須生成密鑰並設置 install.json。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM