现在已经把docker镜像打包,docker容器启动这条线走通了,但是如果我继续更新版本,当他镜像打包完成之后,第二次启动的时候,由于容器名称和占用端口跟正在运行的容器相同, 导致无法正常启动。
那我如果在运行容器的步骤前面加上comman excute步骤,直接用docker命令终止正在运行的容器,会报错:docker 命令不存在。
这种情况怎么解决,感谢回复
你的容器是以后台方式运行的吗?也就是说 OneDev 任务结束后容器还在运行?
是的,后台运行。
那我又有个疑问,用 Run Docker Container默认启动的容器就是后台运行的吧,我好像没做啥其他的配置。
Step 都是以前台方式运行的(没有加 --detach 选项)。可能是因为你指定了 --name 选项,这个选项不应该指定的,因为OneDev 会自己选择一个合适的 name,然后等待该名称的容器结束。
我推荐这种做法:
我试了一下这个流程,到执行shell那个job的时候,一直提示这个Pending resource allocation...
Pending resource allocation...
以下是完整的配置文件,镜像打包步骤完全正常,执行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
OneDev 是以什么方式运行的(bare metal/docker/k8s)? internal executor 是怎么定义的?
OneDev 是以Docker方式运行的
internal executor
那启动 agent 了吗?Agent 不要通过docker 方式启动,否则也没法访问本机的shell
牛逼,可以了,我以前的onedev版本太老了,前两天升级到了最新版,agent被自动停止了,而且多了一些文件,直接启动不了,重新下agent并启动就好了
Open
Closed
现在已经把docker镜像打包,docker容器启动这条线走通了,但是如果我继续更新版本,当他镜像打包完成之后,第二次启动的时候,由于容器名称和占用端口跟正在运行的容器相同, 导致无法正常启动。
那我如果在运行容器的步骤前面加上comman excute步骤,直接用docker命令终止正在运行的容器,会报错:docker 命令不存在。
这种情况怎么解决,感谢回复