docker 启动容器之前需要先把之前运行的容器停止,现在貌似不支持 (OD-1452)
hashtang opened 3 years ago

现在已经把docker镜像打包,docker容器启动这条线走通了,但是如果我继续更新版本,当他镜像打包完成之后,第二次启动的时候,由于容器名称和占用端口跟正在运行的容器相同, 导致无法正常启动。

那我如果在运行容器的步骤前面加上comman excute步骤,直接用docker命令终止正在运行的容器,会报错:docker 命令不存在。

这种情况怎么解决,感谢回复

  • Robin Shen commented 3 years ago

    你的容器是以后台方式运行的吗?也就是说 OneDev 任务结束后容器还在运行?

  • hashtang commented 3 years ago

    是的,后台运行。

    那我又有个疑问,用 Run Docker Container默认启动的容器就是后台运行的吧,我好像没做啥其他的配置。

  • Robin Shen commented 3 years ago

    Step 都是以前台方式运行的(没有加 --detach 选项)。可能是因为你指定了 --name 选项,这个选项不应该指定的,因为OneDev 会自己选择一个合适的 name,然后等待该名称的容器结束。

    我推荐这种做法:

    1. 定义一个 shell executor
    2. 定义一个 job 使用 shell executor,然后运行command step,这个 step 里面运行 docker 命令来启动你的后台容器,可以选择任何你想要的名称和参数。在启动之前检查下如果容器已经运行的话,先停止同名称的容器。
    3. 通过 job dependency 来建立和其他任务的依赖关系,比如这个 job 可能需要依赖构建镜像的 job
  • hashtang commented 3 years ago

    我试了一下这个流程,到执行shell那个job的时候,一直提示这个Pending resource allocation... image.png

    以下是完整的配置文件,镜像打包步骤完全正常,执行shell一直卡着不开始。

    version: 23
    jobs:
    - name: Build Docker
      jobExecutor: Docker-Executor
      steps:
      - !CheckoutStep
        name: checkout
        cloneCredential: !DefaultCredential {}
        withLfs: false
        withSubmodules: false
        condition: ALL_PREVIOUS_STEPS_WERE_SUCCESSFUL
      - !BuildImageStep
        name: Build Docker Image
        tags: app
        publish: false
        condition: ALL_PREVIOUS_STEPS_WERE_SUCCESSFUL
      triggers:
      - !BranchUpdateTrigger
        branches: master
      retryCondition: never
      maxRetries: 3
      retryDelay: 30
      timeout: 3600
    - name: Run Docker
      jobExecutor: internal
      steps:
      - !CommandStep
        name: Run Docker Container
        runInContainer: false
        interpreter: !DefaultInterpreter
          commands:
          - docker stop aigc-app >/dev/null 2>&1 || true
          - docker rm aigc-app >/dev/null 2>&1 || true
          - docker run --name app -p 3001:3001 -d app
        useTTY: false
        condition: ALL_PREVIOUS_STEPS_WERE_SUCCESSFUL
      triggers:
      - !DependencyFinishedTrigger {}
      jobDependencies:
      - jobName: Build Docker
        requireSuccessful: true
        artifacts: '**'
      retryCondition: never
      maxRetries: 3
      retryDelay: 30
      timeout: 3600
    
    
  • Robin Shen commented 3 years ago

    OneDev 是以什么方式运行的(bare metal/docker/k8s)? internal executor 是怎么定义的?

  • hashtang commented 3 years ago

    OneDev 是以Docker方式运行的

    internal executor image_2.png

  • Robin Shen commented 3 years ago

    那启动 agent 了吗?Agent 不要通过docker 方式启动,否则也没法访问本机的shell

  • hashtang commented 3 years ago

    牛逼,可以了,我以前的onedev版本太老了,前两天升级到了最新版,agent被自动停止了,而且多了一些文件,直接启动不了,重新下agent并启动就好了

  • hashtang changed state to 'Closed' 3 years ago
    Previous Value Current Value
    Open
    Closed
issue 1/1
Type
Question
Priority
Normal
Assignee
Issue Votes (0)
Watchers (4)
Reference
OD-1452
Please wait...
Connection lost or session expired, reload to recover
Page is in error, reload to recover