Как сохранить файлы журнала alpine-nginx? - PullRequest
0 голосов
/ 07 ноября 2018

Я хочу сохранить файлы журналов образа Docker Alphine Nginx, чтобы они оставались доступными между перезапусками. У меня есть следующий Dockerfile.

# ---------- Build stage
FROM node:9.11.1-alpine as build-stage

# Make the '/usr/src/app' folder the current working directory
WORKDIR /usr/src/app

# Copy both 'package.json' and 'package-lock.json' (if available)
COPY package*.json ./

# Install project dependencies
RUN npm install

# Copy project files and folders to the current working directory (i.e. '/usr/src/app' folder)
COPY . .

# Build app for production with minification
RUN npm run build

# ---------- Production stage
FROM nginx:1.13.12-alpine as production-stage

# Copy the build files from the previous stage
COPY --from=build-stage /usr/src/app/dist /usr/share/nginx/html

# By default the Alphine image automatically streams Nginx logs (access and error logs) to stdout and stderr
# by creating a symbolic link from stdout to /var/log/nginx/access.log and stderr to /var/log/nginx/error.log
# Lets remove these symbolic links so that we can setup a volume and persist the logs so that they are available
# between restarts
RUN unlink /var/log/nginx/access.log && \
    unlink /var/log/nginx/error.log &&

# Make port 80 accesible outside the container
EXPOSE 80

# Start nginx NOT as daemon, so that the container runs in the foreground so that we can see the requests
CMD ["nginx", "-g", "daemon off;"]

И моя команда запуска:

set CUR_DIR=%cd%
docker run -it --mount type=bind,src=%CUR_DIR%\logs,dst=/var/log/nginx -p 8080:80 --rm --name my-app my-company/my-app

Команда выполняется, а затем выдается следующая ошибка:

nginx: [emerg] open () "/var/log/nginx/error.log" не удалось (2: нет такого файла или каталога)

Странно, что файл error.log создается на хосте и содержит выданную ошибку.

Хорошо, теперь я понял, что это проблема прав пользователя Windows. Если я запускаю контейнер на хосте Linux, он работает. Связанные файлы журнала на хосте принадлежат пользователю root, рабочий процесс nginix выполняется под пользователем nginx. Что я нахожу странным, так это то, что пользователь, чьи учетные данные я использую на хосте Windows, входит в группу администраторов. Пойди разберись. Что касается моего собственного расследования, я снова застрял.

Есть предложения, как это решить?

1 Ответ

0 голосов
/ 09 ноября 2018

Я не смог найти способ решить проблему с правами пользователя в Windows. Поэтому я переключился с метода привязки на том, и он работает.

set CUR_DIR=%cd%
docker volume create test_vol
docker run -it --mount type=volume,src=test_vol,dst=/var/log/nginx -p 8080:80 --rm --name my-app my-company/my-app

Для просмотра содержимого тома используйте следующую команду.

docker run -it --rm -v logs:/logs alpine ls -l /logs

Чтобы просмотреть содержимое файла, используйте следующую команду.

docker run -it --rm -v logs:/logs alpine cat /logs/access.log

Для входа в оболочку, предоставляющую интерактивный доступ к файлам.

docker run -ti -v logs:/logs alpine sh -c 'cd /logs; exec "${SHELL:-sh}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...