如何处理 Docker 中的状态“退出 0”

Rey*_*rPM 8 exit entry-point docker docker-compose docker-container

我已经构建了一个 Docker 镜像,然后使用 Docker Compose 运行了一个容器。以下命令将为我完成这项工作:

docker-compose up -d
Run Code Online (Sandbox Code Playgroud)

我已经重新启动了 PC,现在我想启动我之前创建的前一个容器。所以我尝试了以下命令:

$ docker-compose start 
Starting php-apache ... done
Run Code Online (Sandbox Code Playgroud)

显然它有效,但它不符合以下命令的输出:

$ docker-compose ps
          Name                         Command               State    Ports 
---------------------------------------------------------------------------
php55devwork_php-apache_1   /bin/sh -c bash -C '/usr/l ...   Exit 0        
Run Code Online (Sandbox Code Playgroud)

肯定有什么问题,我想找出什么。

  • 如何找出命令失败的原因?
  • 有什么地方可以让我看到日志文件或帮助我识别和修复错误的东西吗?

如果您想尝试一下,这里是存储库。

更新

如果我删除容器:docker rm <container-id>并通过运行docker-compose up -d --build它重新创建它再次工作。

更新 #1

我看不到这么奇怪的字符:

在此处输入图片说明

pel*_*can 15

这是帮助我解决此问题的原因:在 docker-compose yaml 文件中的一项服务下,键入以下内容:

tty: true 所以它看起来像

version: '3'

services: 
   web: 
     tty: true
Run Code Online (Sandbox Code Playgroud)

希望这对某人有所帮助;如果它对你有帮助,就会振作起来:)


Vla*_*cak 4

我查看了你的 Docker github,setup_php_settings 在线(第 27 行)有source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND

并且它apache2在前台运行,因此它不应该以 status 退出code 0

但在我看来,你似乎setup_php_settings包含一些奇怪的字符(当我用撰写运行你的图像时) (原始字符位于右侧) 奇怪的字符 我已将其更改为新行,它对我有用。让我们知道是否有帮助。

如果您想调试 docker 容器,您可以在没有入口点的情况下运行它,例如:

docker run -it yourImage bash


——经过一番调查后:

当我重新启动 docker 容器时仍然出现一些错误 - 就像您的情况一样,容器已停止并在重新启动后启动。有问题:符号链接已经存在,并且 apache2 有脾气暴躁的 PID,所以我们需要像官方 php docker中那样做一些事情

setup_php_settings容器重新启动后,这对我来说完全有效。

#!/bin/bash -x
set -e

PHP_ERROR_REPORTING=${PHP_ERROR_REPORTING:-"E_ALL & ~E_DEPRECATED & ~E_NOTICE"}
sed -ri 's/^display_errors\s*=\s*Off/display_errors = On/g' /etc/php5/apache2/php.ini
sed -ri 's/^display_errors\s*=\s*Off/display_errors = On/g' /etc/php5/cli/php.ini
sed -ri "s/^error_reporting\s*=.*$//g" /etc/php5/apache2/php.ini
sed -ri "s/^error_reporting\s*=.*$//g" /etc/php5/cli/php.ini
echo "error_reporting = $PHP_ERROR_REPORTING" >> /etc/php5/apache2/php.ini
echo "error_reporting = $PHP_ERROR_REPORTING" >> /etc/php5/cli/php.ini

mkdir -p /data/tmp/php/uploads
mkdir -p /data/tmp/php/sessions
mkdir -p /data/tmp/php/xdebug

chown -R www-data:www-data /data/tmp/php*

ln -sf /etc/php5/mods-available/zz-php.ini /etc/php5/apache2/conf.d/zz-php.ini
ln -sf /etc/php5/mods-available/zz-php-directories.ini /etc/php5/apache2/conf.d/zz-php-directories.ini

# Add symbolic link to get Zend out of the current install dir
ln -sf /usr/share/php/libzend-framework-php/Zend/ /usr/share/php/Zend

a2enmod rewrite
php5enmod mcrypt

# Apache gets grumpy about PID files pre-existing
: "${APACHE_PID_FILE:=${APACHE_RUN_DIR:=/var/run/apache2}/apache2.pid}"
rm -f "$APACHE_PID_FILE"

source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND "$@"
Run Code Online (Sandbox Code Playgroud)