如何使docker撰写状态运行,当前在docker撰写后停止

时间:2020-02-28 14:45:42

标签: docker docker-compose

我正在尝试通过在docker-compose yaml下面进行尝试来使docker-compose状态启动并运行,但是似乎当我执行docker-compose ps时,我看到容器已停止,如何使{{1 }}并无限运行

docker-compose.yml

docker-compose up

这里是Docker文件

  version: "3.7"
  services:
    execute:
      command: tail -f /dev/null
      image: abc/SREBlackBoxTester
      labels:
         - mylabelOne= "SREBlackBoxTester"
      volumes:
         - type: volume
           source: AWS_CREDENTIALS_FOLDER
           target: /home/scar/.aws
           source: SCAR_CONFIG_FOLDER
           target: /home/scar/.scar
           volume:
             nocopy: true
     command: bash -c "while true; do sleep 10; done"

    volumes:
        AWS_CREDENTIALS_FOLDER:
        SCAR_CONFIG_FOLDER:

docker ps -a的输出

 FROM python:3.8-alpine

 RUN apk add zip unzip
 RUN addgroup --system scar && adduser -S -G scar scar
 USER scar

 WORKDIR /home/scar/
  RUN mkdir /home/scar/.scar && \
  mkdir /home/scar/.aws && \
  echo '[default]' > /home/scar/.aws/config && \
  echo 'region=us-west-2' >> /home/scar/.aws/config && \
  echo '[default]' > /home/scar/.aws/credentials && \
  echo 'aws_access_key_id=AX' >> /home/scar/.aws/credentials && \
  echo 'aws_secret_access_key=wctKx/KdRCSQ' >> /home/scar/.aws/credentials

ENV PATH=/home/scar/.local/bin:$PATH
ENV SCAR_LOG_PATH=/home/scar/.scar/

RUN pip3 install scar --user
CMD scar  init -n SREBlack -i image 


ENTRYPOINT /bin/sh

3 个答案:

答案 0 :(得分:1)

通常,应将Docker容器设置为运行特定程序。在大多数情况下,默认值不应为交互式shell或人工tail -f /dev/null命令。在您的示例中,实际上没有任何运行您安装的程序。您应该更改Dockerfile的末尾以实际运行它

FROM python:3.8-alpine
RUN pip install scar
CMD scar

,并提供详细信息,例如通过volumes:安装的凭据。 (请考虑将您的AWS凭证嵌入到Docker映像中是否对它们造成了威胁;拥有该映像的任何人都可以根据您的IAM权限执行允许执行的任何操作。)

在该示例中,您显示了ENTRYPOINTcommand:的组合导致无意义的命令行。 Understand how CMD and ENTRYPOINT interact上的Dockerfile文档包含技术细节。由于您指定了外壳格式ENTRYPOINT,因此将其包装在sh -c中,然后将command:文件中的docker-compose.yml附加到该格式。您结束时会遇到类似

/bin/sh -c '/bin/sh' tail -f /dev/null

仅启动一个外壳程序(忽略“ tail ...”),由于没有输入,它会立即退出。

通常,Docker Compose更面向运行长期运行的应用程序,例如数据库或Web服务器。 SCAR文档包含running the tool in Docker的示例。但是,对于像这样的命令行工具,由于需要做一些事情,例如将AWS凭证从主机手动推送到容器中,并且具有完全等同于root的权限来运行该工具,因此您可能会发现运行该工具更加方便。工具直接在主机上,可能安装在Python虚拟环境中。

答案 1 :(得分:0)

您的docker-compose文件正在为容器设置两个命令

 command: tail -f /dev/null

和(bash已包含在docker映像中)

command: bash -c "while true; do sleep 10; done"

每个服务只能使用一项,并且需要确保该命令不会退出。

您能否提供容器的日志

docker logs ${container_name}

答案 2 :(得分:0)

docker-compose up -d

-d标志代表分离模式