我知道在各种情况下已经提出了这个问题,但尽管我在互联网上阅读了所有内容,但我仍然感到困惑。
我希望在构建容器“mywebsite”之后执行脚本,并且我使用了ENTRYPOINT
,我知道在正常使用中,执行ENTRYPOINT
命令后,容器“mywebsite”退出。我尝试了几个技巧以避免退出,遗憾的是没有成功。
在我的DOCKERFILE
我有这个:
FROM php:7.1.17-apache
[...]
WORKDIR /var/www
COPY docker-entrypoint.sh /var/www/docker-entrypoint.sh
ENTRYPOINT ["sh", "/var/www/docker-entrypoint.sh"]
然后在我的docker-entrypoint.sh中我有这个:
#!/bin/bash
set -e
cd www
chown -R www-data:www-data sites modules themes
exec "$@"
这是我的docker-compose.yml:
version: '3.3'
services:
mywebsite:
build: .
extra_hosts:
- "mywebsite.local:127.0.0.1"
hostname: mywebsite
domainname: local
ports:
- 8088:80
volumes:
- ./www:/var/www/www
- ./vendor:/var/www/vendor
- ./scripts:/var/www/scripts
links:
- database:database
restart: always
tty: true
database:
image: mysql:5.5.49
container_name: mysql-container
ports:
- 3307:3306
volumes:
- ./www/dumps/mywebsite.sql:/docker-entrypoint-initdb.d/dump.sql
restart: always
command: --max_allowed_packet=32505856
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: mywebsite
构建时,所有步骤都很好,一切都设置正确,但容器“mywebsite”继续退出。 (“数据库”服务正常运行)
我讨厌tty: true
和exec "$@"
但这些都不起作用。
你可以像tail -f /dev/null
这样的命令结束
我经常在我的docker-compose.yml中用command: tail -f /dev/null
直接使用它。而且很容易看出我如何保持容器运行。