Вы должны использовать файл .env
, в котором вы поместите свои глобальные окружения для чтения с помощью компоновки.
См.:https://docs.docker.com/compose/environment-variables/#the-env-fileдля получения дополнительной информации об использовании файла.
Другим возможным решением может быть template.yml
файл, вызываемый с помощью docker-compose
, например.:
template.yml
, который является вашим docker-compose.yml
с переменной окружения. env.sh
' source env.sh; rm -rf docker-compose.yml; envsubst < "template.yml" > "docker-compose.yml";
Будет создан новый файл docker-compose.yml
с правильными значениями переменных среды.
Пример файла template.yml:
SampleContainer:
image: myImage:latest
container_name: sample
depends_on:
- mysql-server
restart: always
volumes:
- /opt/docker/myapplication/bootstrap.properties:/opt/myserver/${SERVER_NAME}/bootstrap.properties
Образец env.sh
файла:
#!/bin/bash
export SERVER_NAME=jingool
Другие варианты включают:
docker-compose
В версии 1.5+ включена подстановка переменных:https://github.com/docker/compose/releases
Последняя версия Docker Compose позволяет получить доступ к переменным среды из файла компоновки. Таким образом, вы можете получить свои переменные среды, а затем запустить Compose следующим образом:
set -a
source.my-env
docker-compose up -d
Затем вы можете ссылаться на переменные в docker-compose.yml
с помощью ${VARIABLE}
, например:
/opt/docker/myapplication/bootstrap.properties:/opt/myserver/${SERVER_NAME}/bootstrap.properties
А вот еще информация из документации, взятой здесь:https://docs.docker.com/compose/compose-file/#variable-substitution
Способ BASH:
Вот более гибкий метод с использованием скрипта bash и файла .env
.
Пример .env
файла:
EXAMPLE_URL=http://example.com
# Note that the variable below is commented out and will not be used:
# EXAMPLE_URL=http://example2.com
SECRET_KEY=ABDFWEDFSADFWWEFSFSDFM
# You can even define the compose file in an env variable like so:
COMPOSE_CONFIG=my-compose-file.yml
# You can define other compose files, and just comment them out
# when not needed:
# COMPOSE_CONFIG=another-compose-file.yml
затем запустите этот скрипт bash в том же каталоге,который должен правильно развернуть все:
#!/bin/bash
docker rm -f `docker ps -aq -f name=myproject_*`
set -a
source.env
cat ${COMPOSE_CONFIG} | envsubst | docker-compose -f - -p "myproject" up -d
Тут тоже интересно почитать:https://modulitos.com/2016/03/lets-deploy-part-1/
Благодаря Артему Сергеевичу Ташкинову мне удалось решить проблему. Он написал в комментарии
Try using acpi-cpufreq intead of intel_pstate : https://silvae86.github.io/2020/06/13/switching-to-acpi-power
И это помогло.
Пришлось установить драйвер acpi_cpufreq
(в моем случае он уже был установлен )черезapt-get
apt-get install acpi-support acpid acpi
и отредактируйте /etc/default/grub
, добавив intel_pstate=disable
к GRUB_CMDLINE_LINUX_DEFAULT
, например (в моем случае):
GRUB_CMDLINE_LINUX_DEFAULT="quiet nosplash debug intel_pstate=disable"
Затем запустите update-grub
и перезапустите машину. Следовательно, драйвер intel_pstate
больше не используется, а вместо него используется acpi_cpufreq
. Помимо того, что у меня есть еще много регуляторов на выбор из (, вы можете прочитать здесь о них ), и, самое главное, теперь я могу включить регулятор ondemand
и установить минимальную и максимальную частоту. И так хранится. В моем случае я использовал
cpupower frequency-set -g ondemand -d 1.2GHz -u 2.0GHz
и до сих пор машина не сильно грелась.
[править] После того, как все еще испытывал проблемы с температурой, я понял, в чем проблема. Это частота графического процессора и тот факт, что эта проблема все еще возникает при использовании 3D-приложений. В /sys/kernel/debug/dri/0/i915_ring_freq_table
вы можете увидеть максимальную частоту, на которой может работать графический процессор, соответствующую максимальной частоте процессора. После установки частоты ЦП необходимо настроить частоту ГП в /sys/class/drm/card0/gt_max_freq_mhz
и /sys/class/drm/card0/gt_boost_freq_mhz
.