При установке
DEFAULT_VERSIONS=python=3.5 python2=2.7 python3=3.5
в /etc/make.conf
необходимо перестроить порты, использующие версию Python по умолчанию.
Монтировать каталог узла в виде тома данных
Кроме создания тома с помощью флага -v можно монтировать каталог с узла демона Docker в контейнер.
$ docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py
Эта команда монтирует каталог хоста/src/webapp в контейнер по адресу/opt/webapp. Если путь/opt/webapp уже существует внутри изображения контейнера, установка/src/webapp накладывается, но не удаляет уже существующее содержимое. После удаления подключения содержимое снова становится доступным. Это соответствует ожидаемому поведению команды mount.
container-dir всегда должен быть абсолютным путем, таким как/src/docs. Host-dir может быть абсолютным путем или значением имени. Если для host-dir указан абсолютный путь, Docker привязывает к указанному пути. Если ввести имя, Docker создаст именованный том с таким именем.
Значение имени должно начинаться с буквенно-цифрового символа, а затем a-z0-9, _ (подчеркивание),. (точка) или - (дефис). Абсолютный путь начинается с/( косая черта).
Например, для значения host-dir можно задать значение/foo или foo. Если указано значение/foo, Docker создает привязку. При вводе спецификации foo Docker создает именованный объем.
Если вы используете Docker Machine в Mac или Windows, демон Docker имеет только ограниченный доступ к файловой системе OS X или Windows. Docker Machine пытается автоматически предоставить общий доступ к папке/Users (OS X) или C :\Users (Windows). Таким образом, можно монтировать файлы или каталоги в OS X с помощью.
docker run -v /Users/<path>:/<container path> ...
В Windows установите каталоги с помощью:
docker run -v /c/Users/<path>:/<container path> ...`
Все остальные пути поступают из файловой системы виртуальной машины. Например, если используется VirtureBox или другая папка, доступная для общего доступа, необходимо выполнить дополнительную работу. В случае VirtureBox необходимо сделать папку хоста доступной в качестве общей папки в VirtureBox. Затем его можно смонтировать с помощью флага Docker -v.
Установка каталога хоста может быть полезна для тестирования. Например, можно монтировать исходный код внутри контейнера. Затем измените исходный код и просмотрите его влияние на приложение в режиме реального времени. Каталог на узле должен быть указан как абсолютный путь, и если каталог не существует, Docker автоматически создаст его для вас. Это автоматическое создание пути узла устарело.
Тома Docker по умолчанию монтируются в режиме чтения-записи, но можно также установить их только для чтения.
$ docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py
Здесь мы смонтировали тот же каталог/src/webapp, но мы добавили параметр ro, чтобы указать, что подключение должно быть только для чтения.
Из-за ограничений функции монтирования перемещение подкаталогов в исходном каталоге хоста может предоставить доступ из контейнера к файловой системе хоста. Для этого требуется, чтобы злонамеренный пользователь имел доступ к узлу и подключенному каталогу.
Note: The host directory is, by its nature, host-dependent. For this reason, you can’t mount a host directory from Dockerfile because built images should be portable. A host directory wouldn’t be available on all potential hosts.
-121--184488- С awk (GNU awk для многомерных массивов)
gawk -F, '
{ line[NR] = $0; count[$1]++; found[$1][NR] = 1}
END {
for (id in count)
if (count[id] > 1)
for (nr in found[id])
print line[nr]
}
' file
Порядок вывода может быть не таким, как у входного файла.
Как указано в другом месте, использование rc-local.service
под systemd
становится умеренно нечистым.
poweroff
/ reboot
, которые используют многие люди ). rc-local.service
одним способом, но Debian предоставляет вставку -в файле, которая изменяет как минимум одну важную настройку. rc-local.service
часто может работать хорошо. Если вас беспокоит вышеизложенное, все, что вам нужно сделать, это сделать свою собственную копию! Вот волшебство:
# /etc/systemd/system/my-startup.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/libexec/my-startup-script
[Install]
WantedBy=multi-user.target
Я не думаю, что вам нужно понимать каждую деталь[ *], но здесь вам нужно знать две вещи.
Вам необходимо включить это с помощью systemctl enable my-startup.service
.
Если ваш скрипт зависит от какой-либо другой службы, включая network-online.target
, вы должны объявить об этом. Например. добавьте раздел [Unit]
со строками Wants=network-online.target
и After=network-online.target
.
Вам не нужно беспокоиться о зависимости от служб «ранней загрузки» -, в частности, служб, которые уже заказаны ранее basic.target
. Такие службы, как my-startup.service
, автоматически заказываются после basic.target
, если они не устанавливают DefaultDependencies=no
.
Если вы не уверены, является ли одна из ваших зависимостей службой «ранней загрузки», можно составить список служб, заказанных до basic.target
, запустив systemctl list-dependencies --after basic.target
. (Обратите внимание, что это --after
, а не--before
).
Есть некоторые соображения, которые, как мне кажется, также применимы к пре -systemdrc.local
:
rc.local
. [ *] Я использовал Type=oneshot
+ RemainAfterExit=yes
, потому что это имеет смысл для большинства -кадровых сценариев.Он формализует, что вы запустите ряд команд, что my-startup
будет отображаться как «активный» после их завершения, и что вы не будете запускать демон.
rc.local
. Как я говорил о CentOS 7 и о Debian 8 и об Ubuntu 15:
Вы используете операционную систему systemd+Linux. /etc/rc.local
представляет собой механизм двойной обратной совместимости в systemd, потому что это механизм обратной совместимости для механизма, который сам был механизмом совместимости в клоне van Smoorenburg System 5 rc
.
Использование /etc/rc.local
может привести к ужасным ошибкам. Люди были удивлены тем фактом, что systemd не запускается rc.local
совсем не так, в том же месте начальной загрузки, как они привыкли. (Или ошибочно ожидали :На самом деле он не запускался последним в старой системе, как до сих пор указывается в руководстве OpenBSD. )Другие были удивлены тем фактом, что то, что они установили в rc.local
, ожидая старых способов ведения дел, затем полностью отменяется подобными новым udev
правилам, NetworkManager, systemd-logind
, systemd-resolved
., или различные "наборы".
Как показано в «Почему `init 0 `приводит к «избыточным аргументам» при установке Arch? », некоторые операционные системы уже предоставляют systemd без обратного функции совместимости , такие как генератор systemd-rc-local-generator
.Хотя Debian по-прежнему сохраняет функции обратной совместимости , Arch Linux собирает systemd с их отключением . Таким образом, в Arch и подобных операционных системах ожидается, что/etc/rc.local
будет полностью проигнорировано .
Забудьте о rc.local
. Это не тот путь. У вас есть операционная система systemd+Linux. Так что создайте правильный сервисный модуль systemd и не начинайте с точки, которая находится на расстоянии двух уровней обратной совместимости. (В Ubuntu и Fedora он удалялся три раза, а клон van Smoorenburg System 5 rc
, последовавший за rc.local
, сам дважды заменялся более десяти лет. назад, сначала upstart, а затем systemd.)
Также помните первое правило перехода на systemd .
Это даже не новая идея, относящаяся к systemd. В системах van Smoorenburg rc
и Upstart нужно было создать правильный сценарий van Smoorenburg rc
или файл задания Upstart, а не использовать rc.local
. Даже в руководстве FreeBSD отмечается, что в настоящее время вместо использования /etc/rc.local
создается правильный сценарий Mewburn rc
. Мьюберн rc
был представлен NetBSD 1.5 в 2000 году.
/etc/rc.local
относится ко времени седьмого издания Unix и ранее. Он был заменен /etc/inittab
и уровнем запуска -, основанным rc
в AT&T Unix System 3 (, с немного другим /etc/inittab
в AT&T Unix System 5)в 1983 году . Даже , что теперь уже история.
Создайте надлежащие собственные определения сервисов для вашей системы управления сервисами, будь то пакет сервисов для набора инструментов nosh service-manager
и system-control
, скрипт /etc/rc.d/
для Mewburn rc
, файл сервисного модуля для systemd, файл задания для Upstart, служебный каталог для runit/s6/daemontools -encore или даже /etc/init.d/
скрипт для van Smoorenburg rc
.
В systemd такой администратор -добавил файлы служебных модулей, которые идут в /etc/systemd/system/
обычно (или /usr/local/lib/systemd/system/
редко ).С диспетчером услуг nosh /var/local/sv/
является обычным местом для пакетов локальных услуг. Mewburn rc
во FreeBSD использует /usr/local/etc/rc.d/
. Упакованные файлы сервисных модулей и сервисные пакеты, если вы их создаете, находятся в разных местах.
rc.local
. Руководство системного администратора FreeBSD . 2016 -04 -23. /etc/rc.local
или chmod -x
его. Ошибка RedHat #734268. rc.local
начинается рано. системная ошибка #7703 rc.local
. becane.com. /etc/inittab
осталось в прошлом.. Часто задаваемые ответы. systemd.unit
". Исправления для документа systemd . Часто задаваемые ответы. Краткое изложениеhttps://www.linuxbabe.com/linux-server/how-to-enable-etcrc-local-with-systemd
Создать /etc/systemd/system/rc -local.service:
# /etc/systemd/system/rc-local.service
[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
[Install]
WantedBy=multi-user.target
Тогда:
sudo touch /etc/rc.local
sudo chmod +x /etc/rc.local
sudo systemctl enable rc-local
Проверить с помощью:
sudo systemctl start rc-local.service
sudo systemctl status rc-local.service