Я пытаюсь переключить все свое приложение на докер.
Конфигурация:
Я использовал nginx в качестве сервера. С докером я буду использовать его как прокси:
# nginx -v
nginx version: nginx/1.4.6 (Ubuntu)
Версия докера:
# docker version
Client:
Version: 1.11.1
API version: 1.23
Go version: go1.5.4
Git commit: 5604cbe
Built: Tue Apr 26 23:30:23 2016
OS/Arch: linux/amd64
Server:
Version: 1.11.1
API version: 1.23
Go version: go1.5.4
Git commit: 5604cbe
Built: Tue Apr 26 23:30:23 2016
OS/Arch: linux/amd64
# docker-compose -version
docker-compose version 1.7.1, build 0a9ab35
Установка:
Чтобы установить piwik, я использую предлагаемый здесь файл: индихостеры / пивик
Но я внес некоторые изменения, потому что я хотел бы: - Я хотел бы использовать настраиваемую базу данных, поэтому я настраиваю дополнительного пользователя и пароль. - я хотел бы использовать разные контейнеры mysql для приложения, поэтому я меняю db на piwik_db (я не уверен, что это хорошая практика) - я хотел бы получить доступ к phpmyadmin, но я не понимаю, как заставить его работать с точкой 2. Итак, я удаляю часть конфигурации.
Итак, мой docker compose fil выглядит так:
piwik_db:
image: mysql
volumes:
- ./mysql/runtime:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: P@ssR00t
MYSQL_DATABASE: analytics
MYSQL_USER: admin
MYSQL_PASSWORD: P@ssUser
app:
image: piwik
links:
- piwik_db:mysql
volumes:
- ./config:/var/www/html/config
- ./ssmtp.conf:/etc/ssmtp/ssmtp.conf
- ./revaliases:/etc/ssmtp/revaliases
web:
image: nginx
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ./etc/letsencrypt:/etc/letsencrypt
links:
- app
volumes_from:
- app
ports:
- "8000:443"
cron:
image: piwik
links:
- piwik_db:mysql
volumes_from:
- app
entrypoint: |
bash -c 'bash -s <<EOF
trap "break;exit" SIGHUP SIGINT SIGTERM
while /bin/true; do
su -s "/bin/bash" -c "/usr/local/bin/php /var/www/html/console core:archive" www-data
sleep 3600
done
EOF'
Результат:
Когда я бегу docker-compose up
, он заканчивается ошибкой:
ERROR: for web rpc error: code = 2 desc = "oci runtime error: could not synchronise with container process: not a directory"
Traceback (most recent call last):
File "<string>", line 3, in <module>
File "compose/cli/main.py", line 63, in main
AttributeError: 'ProjectError' object has no attribute 'msg'
docker-compose returned -1
Когда я проверяю, какие контейнеры были установлены, я получаю
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f0388c2a89d3 piwik "bash -c 'bash -s <<E" About a minute ago Up 59 seconds 9000/tcp htdocs_cron_1
ef5d6c8c6e74 mysql "docker-entrypoint.sh" About a minute ago Up About a minute 3306/tcp htdocs_piwik_db_1
Почему я получаю сообщение об ошибке? Как добиться установки? Как сделать так, чтобы приложение всегда работало?
Спасибо заранее за любую помощь.
Ps: я все еще использую свою конфигурацию nginx в site-available:
server {
listen 80;
listen [::]:80;
server_name piwik.domain.com;
# Redirige le HTTP vers le HTTPS #
return 301 https://$server_name$request_uri;
}
server {
##
# config SSL
##
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/piwik.domain.com.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/piwik.domain.com.com/privkey.pem;
keepalive_timeout 70;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
fastcgi_param HTTPS on;
# add Strict-Transport-Security to prevent man in the middle attacks
add_header Strict-Transport-Security "max-age=31536000";
server_name piwik.domain.com.com;
server_name_in_redirect off;
root /usr/share/nginx/html/piwik.domain.com.com/htdocs;
index index.php index.html index.htm;
# Logs
access_log /var/log/analytics.access_log;
error_log /var/log/analytics.error_log;
# Default location settings
location / {
try_files $uri $uri/ /index.php?$args;
charset utf-8;
client_max_body_size 20M;
}
# Images and static content is treated different
location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|html|woff|woff2|ttf|svg|eot|otf)$ {
add_header Access-Control-Allow-Origin *;
expires 360d;
access_log off;
add_header Cache-Control "public";
}
# Deny access to .htaccess files, if Apache's document root
location ~ /\.ht {
deny all;
}
location ~ /(libraries|setup/frames|setup/libs) {
deny all;
return 404;
}
# Pass the PHP scripts to FastCGI server
location ~* \.php$ {
# Prevent Zero-day exploit
try_files $uri =404;
#
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
# Redirect server error pages to the static page
error_page 403 /403.html;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
# Exclude from the logs to avoid bloating when it's not available
include drop.conf;
}
В моем случае проблема заключалась в том, что при создании файла он пытался смонтировать файлы, а не папки, изменение решило проблему.