it-roy-ru.com

DOCKERFILE: запуск нескольких CMD. (Начиная с NGINX и PHP)

У меня есть dockerfile, который настраивает NGINX, PHP, добавляет репозиторий Wordpress. Я хочу во время загрузки запустить PHP и NGINX. Однако я не могу этого сделать. Я попытался добавить две команды в массив CMD, а также попытался поместить их в файл оболочки и запустить файл оболочки. Ничего не получалось. Ниже мой Dockerfile

FROM ubuntu:16.04

WORKDIR /opt/

#Install nginx
RUN apt-get update
RUN apt-get install -y nginx=1.10.* php7.0 php7.0-fpm php7.0-mysql

#Add the customized NGINX configuration
RUN rm -f /etc/nginx/nginx.conf
RUN rm -f /etc/nginx/sites-enabled/*

COPY nginx/nginx.conf /etc/nginx/
COPY nginx/site.conf /etc/nginx/sites-enabled

#Copy the certificates
RUN mkdir -p /etc/pki/nginx
COPY nginx/certs/* /etc/pki/nginx/
RUN rm -f /etc/pki/nginx/placeholder

#Copy the build to its destination on the server
RUN mkdir -p /mnt/wordpress-blog/
COPY . /mnt/wordpress-blog/

#COPY wp-config.php
COPY nginx/wp-config.php /mnt/wordpress-blog/

#The command to run the container
CMD ["/bin/bash", "-c", "service php7.0-fpm start", "service nginx start"]

Я попытался поместить команды в CMD в файл оболочки и запустить файл оболочки в команде CMD. Это все еще не сработало. что мне не хватает?

5
Nicolas El Khoury

start.sh

#!/bin/bash

/usr/sbin/service php7.0-fpm start
/usr/sbin/service nginx start
tail -f /dev/null

Dockerfile

COPY ["start.sh", "/root/start.sh"]
WORKDIR /root
CMD ["./start.sh"]

Благодаря этому вы можете поместить более сложную логику в start.sh.

3
lagom

Вы можете заменить строку CMD для некоторых, как ...

CMD ["/bin/bash", "-c", "/usr/sbin/service php7.0-fpm start && nginx -g 'daemon off;'"]

2
SilvioQ

TL; DR: У вас нет точки входа.

Основная идея в Docker - иметь одну ответственность за контейнер. Итак, чтобы продолжить работу контейнера Docker, вы должны запустить программу на переднем плане после загрузки контейнера.

Однако в вашем Dockerfile нет точки входа для запуска программы на переднем плане. Итак, сразу после загрузки вашего контейнера ваш контейнер завершает работу.

Итак, чтобы предотвратить выход из вашего контейнера, просто запустите программу на переднем плане.

Nginx например.

Пример сценария:

содержание entrypoint.sh:

#!/bin/bash
service php7.0-fpm start
nginx -g 'daemon off;

где-то в Dockerfile:

COPY [ "./entrypoint.sh", "/root/entrypoint.sh" ]

в конце Dockerfile:

ENTRYPOINT /root/entrypoint.sh
0
Yarimadam