Я довольно новичок в использовании Docker и пытаюсь создать локальную среду разработки для запуска своих собственных проектов php или laravel.
Это моя структура папок
root-dir
- src // this is where my php / laravel code lives
-- info.php // file having phpinfo(); just to ensure that everything has set properly
- docker // this is where all containers and config settings live
-- php etc..
- docker-compose.yml
Это мой докер / php / Dockerfile
FROM ubuntu:18.04
ENV TERM=linux
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update
RUN apt-get install -y curl zip unzip --no-install-recommends apt-utils ca-certificates
RUN apt-get install -y --no-install-recommends php7.2-fpm \
php7.2-cli \
php7.2-mysql \
php7.2-xml \
php7.2-curl \
php7.2-bcmath \
php7.2-bz2 \
php7.2-curl \
php7.2-zip \
php7.2-gd \
php7.2-gettext \
php7.2-zip \
php7.2-soap \
php7.2-odbc \
php7.2-json \
php7.2-geoip \
php7.2-igbinary \
php7.2-imagick \
php7.2-mbstring \
php7.2-msgpack \
php7.2-ssh2 \
php7.2-memcached \
php7.2-xdebug \
php7.2-intl \
php7.2-opcache \
php7.2-readline
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN apt-get clean
RUN rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/* ~/.composer
COPY php.ini /etc/php/$PHPVER/cli/php.ini
COPY php.ini /etc/php/$PHPVER/fpm/php.ini
COPY 20-xdebug.ini /etc/php/$PHPVER/cli/conf.d/20-xdebug.ini
COPY 20-xdebug.ini /etc/php/$PHPVER/fpm/conf.d/20-xdebug.ini
COPY php-fpm-startup /usr/bin/php
CMD /usr/bin/php
EXPOSE 9000
ENTRYPOINT ["/usr/bin/php"]
CMD ["--version"]
Когда я бегу docker-compose up -d
Я получаю эту ошибку
ERROR: for php Cannot start service php: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"/usr/bin/php\": permission denied": unknown
Это мой файл nginx / default.conf
server {
listen 80 default_server;
root /var/www/html;
index index.html index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
access_log off;
error_log /var/log/nginx/error.log error;
sendfile off;
client_max_body_size 100m;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors off;
fastcgi_buffer_size 16k;
fastcgi_buffers 4 16k;
}
location ~ /\.ht {
deny all;
}
}
добавьте пользователя в ваш dockerfile, который выполнит для вас двоичный файл php примерно так:
....
RUN ["chmod", "+x", "/usr/bin/php"]
RUN ["chmod", "+x", "-R", "/var/log"]
EXPOSE 9000
RUN useradd -ms /bin/bash admin
USER admin
ENTRYPOINT ["/usr/bin/php"]
CMD ["--version"]
RE: чат convo
Однако вы обеспокоены тем, почему контейнер перестал работать.
Если ваша команда завершает выполнение, контейнер будет прерван
Если ваша команда завершится неудачно и tty умрет, контейнер прекратит работу.
Другими словами, если ваша команда никогда не выполняется, не запускается и не завершается, как в вашем примере
php -verson
это код, который вы пытаетесь запустить
когда это завершится, контейнер прекратит
Если вы не ловите stdout
вы никогда не увидите это выполнить
и контейнер прекратит работу, как будто ничего не произошло.