我正在尝试通过在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
答案 0 :(得分:1)
通常,应将Docker容器设置为运行特定程序。在大多数情况下,默认值不应为交互式shell或人工tail -f /dev/null
命令。在您的示例中,实际上没有任何运行您安装的程序。您应该更改Dockerfile的末尾以实际运行它
FROM python:3.8-alpine
RUN pip install scar
CMD scar
,并提供详细信息,例如通过volumes:
安装的凭据。 (请考虑将您的AWS凭证嵌入到Docker映像中是否对它们造成了威胁;拥有该映像的任何人都可以根据您的IAM权限执行允许执行的任何操作。)
在该示例中,您显示了ENTRYPOINT
和command:
的组合导致无意义的命令行。 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标志代表分离模式