bash - Docker运行/星/执行?

标签 bash docker

嗨,我已经在ubuntu镜像上构建并安装了ziftrCoin钱包。

8084e9de3c23 ubuntu:latest "/bin/bash" 25 hours ago Up About a minute 0.0.0.0:10332->10332/tcp ziftrCoin  

问题是我退出容器后ziftrcoind关闭。
尝试运行docker exec -it ziftrCoin /root/64/./ziftrcoind程序启动,但我已连接到容器。如果我退出同样的问题。

那么,当我使用"ziftrCoin /root/64/./ziftrcoind"而不是"/bin/bash"启动容器时,如何更新/编辑COMMAND?

更新

如果我运行它,我不会使其保持打开状态。
docker run -d ziftr
252554f38c2a41bdd29875bcb6ab7b6bbe98522e16828b1f8b06d8899bc5134c

docker run -it ziftr
ZiftrCOIN server starting

FROM ubuntu
MAINTAINER Krister Johansson <hello@nodejs.how>
WORKDIR /var/ziftrCoin
RUN apt-get update
RUN apt-get install -y wget
RUN wget "https://d19y4lldx7po3t.cloudfront.net/assets/downloads/0.9.3/ziftrcoin-0.9.3-linux64.tar.gz"
RUN tar -xvzf ziftrcoin-0.9.3-linux64.tar.gz
RUN rm ziftrcoin-0.9.3-linux64.tar.gz

ADD ./src/ziftrcoin.conf /root/.ziftrcoin/ziftrcoin.conf

EXPOSE 10332 11332
CMD ["64/./ziftrcoind"]

最佳答案

对于Docker,当pid 1(位于容器内)的进程退出时,它也将退出(并杀死该容器中正在运行的所有其他进程)。这就是您发生的情况,因为/bin/bash是pid 1的过程。您需要做的是将ziftrcoind进程设置为 pid 1

您没有提供Dockerfiledocker run命令,但我假设您运行的类似于docker run ziftrcoin(其中ziftrcoin将是您生成的图像的名称),并且您的CMD中没有Dockerfile

想法是给docker一个默认命令,在CMD中使用Dockerfile,或者给它发出docker run时运行的命令。

让我们看看Dockerfile的样子:

FROM Ubuntu
RUN # … Install ziftrcoind
CMD ["/root/64/./ziftrcoind"]

如果构建此镜像,则在运行它时,默认命令将是/root/64/./ziftrcoind而不是/bin/bash。您也可以执行docker run ziftrcoint /root/64/./ziftrcoind以达到相同的效果。

正如Kevan Ahlquist所评论的那样,如果要在后台运行它,则可以使用标志-d:docker run -d ziftrcoin(是否带有命令,取决于CMD中是否包含Dockerfile)。

关于bash - Docker运行/星/执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30292842/

相关文章:

bash - shell命令查找进程ID并附加到它?

arrays - 枚举具有给定名称的正在运行的进程数 - 分配给变量

docker - Kubernetes - 如何制作简单的 Linux 容器镜像而无需永久运行应用程序

ssl - x509: 构建 docker 镜像时由未知权威签署的证书

c# - "InvalidOperationException: IDX20803: Unable to obtain configuration from: ' [PII 被隐藏] '"

bash - 在 bash 中粘贴带有扩展分隔符的文件

POSIX 与非 POSIX 模式下的 Bash 赋值语句扩展

mysql - 运行 bash 脚本一并停止

docker - docker-compose solr以独立模式创建多个内核

django - 如何正确设置环境变量 Gitlab CI/CD 和 Docker