Docker Compose использует переменную среды в томах

Por lo que he recopilado, la razón general de esto se debe a los permisos de SELinux. Cuando crea hosts virtuales, SELinux espera que cree tipos de SELinux para cada host virtual para que cada host no pueda pisotear o leer archivos de otro host, lo cual tiene sentido.

Si tiene policycoreutilsinstalado, puede usar audit2whypara echar un vistazo a lo que se le niega el acceso y, a menudo, sugiere formas de remediar esto (no siempre es la mejor manera de arreglar el problema, pero a menudo lo más rápido sin simplemente deshabilitar SELinux ).

Por ejemplo, para ver todos los accesos denegados en el registro de auditoría:audit2why <<< "$(

Lo más probable es que veas algo como:

type=AVC msg=audit(1528554604.842:403): avc:  denied  { append } for  pid=34797 comm="httpd" name="error.log" dev="sda2" ino=51161328 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:httpd_sys_content_t:s0 tclass=file

    Was caused by:
    The boolean httpd_unified was set incorrectly.
    Description:
    Allow httpd to unified

    Allow access by executing:
    # setsebool -P httpd_unified 1

En este caso, habilitar httpd_unifiedpermite que httpd se inicie correctamente de nuevo, ya que permite que todos los hosts virtuales compartan el contexto de tipo, que es menos seguro, pero nuevamente es mejor que apagar SELinux.

Ver:https://www.redhat.com/archives/fedora-selinux-list/2009-March/msg00070.html

1
16.07.2019, 06:37
1 ответ

Вы должны использовать файл .env, в котором вы поместите свои глобальные окружения для чтения с помощью компоновки.

См.:https://docs.docker.com/compose/environment-variables/#the-env-fileдля получения дополнительной информации об использовании файла.

Другим возможным решением может быть template.ymlфайл, вызываемый с помощью docker-compose, например.:

  • Создайте template.yml, который является вашим docker-compose.ymlс переменной окружения.
  • Предположим, что ваши переменные окружения находятся в файле ' env.sh'
  • Поместите приведенный ниже фрагмент кода в файл 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/

4
27.01.2020, 23:41

Теги

Похожие вопросы