Compose: Docker-compose.yml рдореЗрдВ рд╢реЗрд▓ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 27 рдЕрдХреНрддреВре░ 2016  ┬╖  41рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: docker/compose

рд╣реИрд▓реЛ, рдХреНрдпрд╛ docker-compose.yml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╢реЗрд▓ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ?
рдпрд╣рд╛рдБ рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рд╣реИ:

 version: '2'
 services:
   ci:
     image: jenkins
     volumes:
       - ./data:/var/jenkins_home
       - /var/run/docker.sock:/var/run/docker.sock
       - $(command -v docker):/usr/bin/docker
     groupadd:
       - $(stat -c %g /var/run/docker.sock)
     ports:
       - "8080:8080"
       - "50000:50000"

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпрд╣ рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рджреЗ рд░рд╣рд╛ рд╣реИ:

ERROR: Invalid interpolation format for "volumes" option in service "ci": "${command -v docker}:/usr/bin/docker"

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ ....

рд╕рднреА 41 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╣рд╛рдп @ рдЬрд╝рд╛рдВрдбрд╛ ,

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдпрд╣ рдРрд╕реА рдЪреАрдЬ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХрд╛ рд╣рдо рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред рдЖрдорддреМрд░ рдкрд░, рдпрд╣ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХрдореНрдкреЛрдЬрд╝ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ рдЪрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

@ рдкрд┐рдВрдбрд▓реА - рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдзрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред .env рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд▓рдЧрддрд╛ рд╣реИред
рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдбреЙрдХреНрд╕: https://docs.docker.com/compose/environment-variables/#/the -env-file

@zkanda рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХрднреА рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рд▓рд╛, рдореИрдВрдиреЗ рдЕрдкрдиреЗ .env рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЛрд╢рд┐рд╢ рдХреА

DOCKER_BIN=`which docker`

рдФрд░ рдлрд┐рд░ docker-compose.yml рдореЗрдВ

jenkinsmaster:
  build: jenkins-master
  volumes:
    - /var/run/docker.sock:/var/run/docker.sock
    - ${DOCKER_BIN}:/usr/bin/docker
  ports:
    - "50000:50000"

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдорд┐рд▓рддрд╛ рд░рд╣рддрд╛ рд╣реИ

Cannot create container for service jenkinsmaster: create `which docker`: "`which docker`" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed.

рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдорд╛рдВрдб .env рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд┐рдП рдЧрдП рд╣реИрдВ?

.env рдпрд╛ рдЕрдиреНрдп рдЬрдЧрд╣реЛрдВ рдкрд░, Compose рджреНрд╡рд╛рд░рд╛ рдХрдорд╛рдВрдб рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ ....

+1

рдпрд╣рд╛рдБ рдПрдХ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рд╣реИред рдХрдлрдХрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЗрд╕реЗ рдореЗрдЬрдмрд╛рди рдорд╢реАрди рдХреЗ рдЖрдИрдкреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдореЗрд░реЗ рд▓рд┐рдП рд╡рд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ:

DOCKER_HOST_IP=$(ifconfig | grep 'inet .*br' | sed -E 's/.*inet (.*) netmask.*/\1/')

рдореИрдВ env рдореЗрдВ рдЙрд╕ IP рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд╣реВрдВред рдореИрдВ рдЕрдм рдХреЗрд╡рд▓ docker-compose up рдирд╣реАрдВ рдЪрд▓рд╛ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдЙрд╕ рдкрд╣рд▓реЗ рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рдореБрдЭреЗ рдЗрд╕ рдЯреАрдо рдкрд░ рдЕрдиреНрдп рджреЗрд╡реЛрдВ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

+1

рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛, рдЬреИрд╕реЗ:

services:
  foo:
    image: bar:latest
    user: ${CURRENT_USER-$(id -u):$(id -g)}

рдЕрдиреНрдп рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рднреА рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП ...

рд╡реИрд╕реЗ, рдореБрдЭреЗ рдпрд╣ рддрдереНрдп рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рд╣рдо рдмреИрд╢ рдлрдВрдХреНрд╢рдВрд╕ рдХреЗ рд╢реЗрд╖ рднрд╛рдЧ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ ${BAZ-default} рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ... (рдЬрд╣рд╛рдБ рддрдХ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ, - рдмреИрд╢ рдХреЗ рдЪрд░ рд╣реЗрд░рдлреЗрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХрддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП ${VAR/search/replace} рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд░реВрдк рдореЗрдВ)

рд╣рд╛рдВ @ davi5e ... рдореИрдВ

version: "3.7"

services:
  orchestrator:
    build: .
    ports:
      - "2000:2000"
    # Use type host until we can test link
    network_mode: "host"
    environment:
      - NODE_ENV=development
      - LOCAL_USER_ID=${id -u}

@ davi5e рдПрдХ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрдм рдЖрдк рдПрдХ

+1
Plz рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдирд╛

+1
рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рдкреЛрд░реНрдЯ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ "рдмреЗрд╕" рдкреЛрд░реНрдЯ рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдпрд╣ рдпреВрдЖрдИрдбреА / рдЬреАрдЖрдИрдбреА тАЛтАЛрд╡реИрд░рд┐рдПрдмрд▓ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдбреЙрдХрдЯрд░ рдХреЛ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдорд╛рд╣реМрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдмрд┐рдирд╛ рдЗрд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ред рдПрдирдПрдирд╡реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ)ред

+1

рдпрд╣ рдкреНрд░рдпреЛрдЧ рд▓реЗрдмрд▓ / рдЯреИрдЧ рдХреЗ рд▓рд┐рдП рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

.env :

GIT_VERSION=$(git describe --always --dirty --abbrev)
OUTER_PORT=6970

docer-complse.yml :

version: '3'
services:
  nginx:
    restart: always
    build:
        context: ./nginx
        labels:
          org.label-schema.schema-version: "1.0"
          org.label-schema.version: "${GIT_VERSION}"
          org.lavel.schema.url: "https://mydocu-server.company.com/vcs/${GIT_VERSION}"
    ports:
      - ${OUTER_PORT}:8080

рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХрд╛ рд╢реЗрд▓ UID рд╡реИрд░рд┐рдПрдмрд▓ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╕реНрдерд╛рдиреАрдп рд╡рд┐рдХрд╛рд╕ рдЫрд╡рд┐ рдмрдирд╛рддреЗ рд╕рдордп рдЗрд╕реЗ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЪреВрдБрдХрд┐ рд╕реНрдерд╛рдиреАрдп рд╡рд┐рдХрд╛рд╕ рдХреА рдЫрд╡рд┐ рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрдШрд░реНрд╖реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИред

+1

@ con-f-Use Doing рдЬреЛ рд╕рд┐рд░реНрдл рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрдорд╛рдВрдб рднреЗрдЬреЗрдЧрд╛ рдФрд░ рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреЗрд╡рд▓ рд╣реИрдХ рдЬреЛ рдореИрдВ рдЕрдм рддрдХ рд╕рдлрд▓ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ docker рдХрдВрдкреЛрдЬрд╝ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред

+1

TL, DR рдпрджрд┐ рдЖрдк рдЙрди рдЪрд░ рдХреЛ .env рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

# set the path of .env file here
ENV_FILE="${ENV_FILE:-local.env}"
while IFS= read -r line; do
  export "$line"
done < <( grep --color=never -E -v -e '^#' -e '^[[:space:]]*$' "${ENV_FILE}" )

рдХреИрд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗ:

  • рдЗрд╕реЗ рдЕрдкрдиреА рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рдЯрд╛рдЗрдк рдХрд░реЗрдВ рдФрд░ рдЕрдкрдиреЗ рд╡рд░реНрддрдорд╛рди рд╢реЗрд▓ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдВрдЯрд░ рджрдмрд╛рдПрдВ

рдпрд╛

  • рдЗрд╕реЗ рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдЗрд╕реЗ рд╕реНрд░реЛрдд рдХрд░реЗрдВ

рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ:

  • рдЗрд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрдирд╛ рдФрд░ рдЗрд╕реЗ рдЪрд▓рд╛рдирд╛ рдЖрдкрдХреЗ рдореМрдЬреВрджрд╛ рд╢реЗрд▓ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЬрд╛рджреБрдИ рд░реВрдк рд╕реЗ рдЙрди рдЪрд░ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕реНрд░реЛрдд рдпрд╛ рдХреБрдЫ рдлреИрдВрд╕реА eval ред
  • (рд╢рд╛рдпрдж рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд?) рдпрд╣ $ENV_FILE рдореЗрдВ рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рд╕рд╛рде рдореМрдЬреВрджрд╛ рдЪрд░ рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░ рджреЗрдЧрд╛

рд╡реНрдпрд╛рдЦреНрдпрд╛: рдпрд╣рд╛рдБ

рд╕рднреА рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП direnv рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ https://direnv.net/

рд╢реБрдХреНрд░ рдкрд░, рдЬреВрди 28, 2019, 12:57 рдЕрдкрд░рд╛рд╣реНрди рд╕реБрджрд░реНрд╢рди рд╡рд╛рдбрдХрд░ рд╕реВрдЪрдирд╛рдПрдВ @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

TLред DR; рдпрджрд┐ рдЖрдк рдЙрди рдЪрд░ рдХреЛ .env рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

рдпрд╣рд╛рдБ .env рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрде рд╕реЗрдЯ рдХрд░реЗрдВ

ENFS_FILE = "$ {ENV_ FILE: -local.env }" рдЬрдмрдХрд┐ IFS = read -r рд▓рд╛рдЗрди; рдХрд░
рдирд┐рд░реНрдпрд╛рдд "$ рд▓рд╛рдЗрди" рдХрд┐рдпрд╛ рдЧрдпрд╛ <<(grep --color = never -E -v -e '^ #' -e '^ ^ [[: space:]] * $' "$ {ENV_FILE}")

рдХреИрд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗ:

  • рдЗрд╕реЗ рдЕрдкрдиреА рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рдЯрд╛рдЗрдк рдХрд░реЗрдВ
  • рдЗрд╕реЗ рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдЗрд╕реЗ рд╕реНрд░реЛрдд рдХрд░реЗрдВ

рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ:

  • рдЗрд╕реЗ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрдирд╛ рдФрд░ рдЗрд╕реЗ рдЪрд▓рд╛рдирд╛ рдЬрд╛рджреБрдИ рд░реВрдк рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛
    рдЖрдкрдХреЗ рд╡рд░реНрддрдорд╛рди рд╢реЗрд▓ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЪрд░ред рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕реНрд░реЛрдд рдпрд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
    рдХреБрдЫ рдлреИрдВрд╕реА evalред
  • (рд╢рд╛рдпрдж рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИ?) рдпрд╣ рдореМрдЬреВрджрд╛ рдЪрд░ рдХреЛ рдЙрд╕реА рдХреЗ рд╕рд╛рде рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░реЗрдЧрд╛
    $ ENV_FILE рдореЗрдВ рдирд╛рдо

рд╡реНрдпрд╛рдЦреНрдпрд╛: рдпрд╣рд╛рдБ
https://explainshell.com/explain?cmd=while+IFS%3D+read+-r+line%3B+do+export+%22%24line%22%3B+done+%3C+%3C%28grep+--color%3Dno+ -v + -e +% 27% 5E% 23% 27 + -e +% 27% 5E% 5 рдм% 5 рдм% 3Aspace% 3A% 5D% 5D *% 24% 27 +% 24% 7BENV_FILE% 7 рджрд┐рди% 29

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдЗрд╕ рдзрд╛рдЧреЗ рдХреА рд╕рджрд╕реНрдпрддрд╛ рджреА рдЧрдИ рд╣реИред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com
рдпрд╛ рдзрд╛рдЧрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AACHRDGJ6FAQBEDLBSRVS6TP4XOBJANCNFSM4CUISSSA
ред

рд╣рд╛рдБ, direnv рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдбреЙрдХрд░ рдХреЗ .env рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рд╕рд░рд▓ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рджреЗ VAR=VAL рд╕рд┐рдВрдЯреИрдХреНрд╕ ( рдЗрд╕ рд▓рд┐рдВрдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░) рд╣реИред рд╡рд┐рдЪрд╛рд░ .env рдлрд╝рд╛рдЗрд▓ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рд╣реИ рдФрд░ рдмрд┐рд▓реНрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрд╕реЗ рдореЗрд░реЗ рд╕реНрдерд╛рдиреАрдп рдпрд╛ docker-compose рдкрд░ рдЪрд▓рд╛ рд╕рдХрддреА рд╣реИ, рдЗрд╕реЗ рд╕реНрдЯреЗрдЬрд┐рдВрдЧ / рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдирд╣реАрдВ рд╣реИрдВ
рдпрджрд┐ рд╡реЗ рдЗрд╕рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ рддреЛ https://en.wikipedia.org/wiki/Environment_variable
рдХреЛрдб рдЖрдзрд╛рд░ рдФрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ ...

рд╢реБрдХреНрд░ рдкрд░, рдЬреВрди 28, 2019 рдХреЛ рджреЛрдкрд╣рд░ 2:04 рдмрдЬреЗ рд╕реБрджрд░реНрд╢рди рд╡рд╛рдбрдХрд░ рд╕реВрдЪрдирд╛рдПрдВ @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рд╣рд╛рдБ, direnv рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдбреЙрдХрд░ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛
.env рдлрд╝рд╛рдЗрд▓ рдЬрд┐рд╕рдореЗрдВ рд╕рд╛рджрд╛ VAR = VAL рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рд╕рд░рд▓ рд░реЗрдЦрд╛рдПрдБ рд╣реИрдВ (рдЗрд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░
https://docs.docker.com/compose/env-file/#syntax-rules рд▓рд┐рдВрдХред) рд╡рд┐рдЪрд╛рд░
.env рдлрд╛рдЗрд▓ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдФрд░ рдмрд┐рд▓реНрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рд╣реИ
рдЗрд╕реЗ рдореЗрд░реЗ рд▓реЛрдХрд▓ рдкрд░ рдЪрд▓рд╛рдПрдВ рдпрд╛ рдбреЙрдХрдЯрд░-рдХрдВрдкреЛрдЬ рдХрд░рдХреЗ рдЗрд╕реЗ рд╕реНрдЯреЗрдЬрд┐рдВрдЧ / рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдЗрд╕ рдзрд╛рдЧреЗ рдХреА рд╕рджрд╕реНрдпрддрд╛ рджреА рдЧрдИ рд╣реИред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com
рдпрд╛ рдзрд╛рдЧрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AACHRDF3Q3YOZPHUIUZYEPTP4XV5BANCNFSM4CUISSSA
ред

рдУрд╣ рдареАрдХ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ .env рдлрд╝рд╛рдЗрд▓ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ рдЬрдм рдЖрдк docker-compose up рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рдПрдХ рд╕реНрдерд╛рдиреАрдп рджреЗрд╡ рдЙрджрд╛рд╣рд░рдг (рд╕рдВрднрд╡рддрдГ docker-compose рдорджрдж рдХреЗ рдмрд┐рдирд╛) рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рддреНрдп рдХреЗ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдорд╛рди .env рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдерд╛ред рддреЛ рд╣рд╛рдБ, рд╢рд╛рдпрдж .env рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡реЗ рд▓рд╛рдЗрдиреЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреЗ рд╣реИрдВ рдЬрдм рдЖрдк рддреИрдирд╛рдд рдХрд░рддреЗ рд╣реИрдВред

рдореИрдВ рдЕрднреА рднреА рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ direnv рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреИрд╕реЗ рдорджрдж рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред

рдПрдХ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рдПрдХ рдХрдорд╛рдВрдб рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдХрдВрдЯреЗрдирд░ рдореЗрдВ env var рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдкрд╛рд╕рд╡рд░реНрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╢рдмреНрджрд╢рдГ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ .env рдпрд╛ docker-compose.yml рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрдИ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдВрдмрдВрдзреА рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝рд╛ рд▓рд╛рдн рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред

+1

+1

+1, рд╕рдорд╛рдзрд╛рди рдХреЛ рдЬрдЯрд┐рд▓ рдХрд┐рдП рдмрд┐рдирд╛ uid рдФрд░ gid рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рдж рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛

`` `
/ _ / \
(рдК)

^ <`` `

+1 рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦрд┐рдд рдЧрд┐рдЯ рд╢рд╛рдЦрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдХрдореНрдкреЛрдЬрд╝ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреНрд░рддрд┐рдмрджреНрдз рд╣реИ рдЬреЛ рдЕрдВрддрддрдГ рдбреЙрдХрдЯрд░рд╛рдЗрд▓ рдореЗрдВ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдлрд┐рд░ рдорд▓реНрдЯреАрд╕реНрдЯреЗрдЬ рдбреЙрдХрдЯрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдПрдХ рдЪрд░рдг рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдЬрд╛рд░ рдХреЗ рдкреНрд░рдХрдЯрди рдореЗрдВ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред ред

  gateway:
    image: name
    build:
      context: ./project
      dockerfile: build/Dockerfile
      args:
        - GIT_COMMIT=${$(git rev-list -1 HEAD):-unspecified}
        - GIT_DATE=${$(git log -1 --date=short --pretty=format:%ct):-unspecified}

рдЗрд╕рд▓рд┐рдП, рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдореЗрд░реА рд░рдЪрдирд╛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ 7 рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ 7x2 рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╕ред

@ рдкрд┐рдВрдбрд▓реА- рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз рдХреЗ рд░реВрдк рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдареЛрд╕ рдЬрд░реВрд░рдд рд╣реИред

+1 рд╢рд╛рдпрдж рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдПрдХ рдХрдВрдЯреЗрдирд░ рдХреЗ рднреАрддрд░ рдбреЙрдХ рдЗрдВрдЬрди рдХреЛ рдПрдХ рдкрдбрд╝реЛрд╕реА рдХрдВрдЯреЗрдирд░ рдХреЛ рд░рд┐рдмреВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЬрд╣рд╛рдВ рдореЗрд░реЗ рд▓реЗрдЯреЗрд╕рдХреНрд░рд┐рдкреНрдЯ рдХреНрд░рд┐рдкреНрдЯ рдХреА рд╕рдордп рд╕реАрдорд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╡реАрдиреАрдХрд░рдг рдХреЗ рдмрд╛рдж рдПрдирдЬреАрдЗрдирдХреНрд╕ рдХрдВрдЯреЗрдирд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рдбреЙрдХрдЯрд░-рдХрдВрдкреЛрдЬрд╝ рдХреИрд╕реЗ рдмрддрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рд╕рдореВрд╣ рдХреЗ рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд╛рдо рдХреНрдпрд╛ рд╣реИ? PROJECT=(basedir ~+) ред рдпрд╣ рдЕрдм рдХреЗ рд▓рд┐рдП рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреЛрдбрд┐рдд рд╣реИ :(

рдЙрд╕ рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП +1
рдПрдХ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рдПрдХ cli / http (рдЬреИрд╕реЗ рд╡реЙрд▓реНрдЯ, 1рдкрд╛рд╕рд╡рд░реНрдб) рд╕реЗ рд░рд╣рд╕реНрдпреЛрдВ рдХреЛ рд╣рдерд┐рдпрд╛рдиреЗ рдФрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдореЗрдВ рдкреНрд▓рдЧ рдХрд░рдиреЗ рдХрд╛ рд╣реИред
рдЕрд░реНрдерд╛рдд

...
    environment:
      - SERVICE_USERNAME=$(vault kv get -field=username kv/service/credentials)
      - SERVICE_PASSWORD=$(vault kv get -field=password kv/service/credentials)
...

рдореБрдЭреЗ @rafaelbattesti рдЬреИрд╕реА рд╣реА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдореИрдВ рд▓рд╛рд╕реНрдЯрдкрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

...
     environment:
         - TRPASSWD=$(lpass show --password Transmission)
....

+1

+1

@ рдкрд┐рдВрдбрд▓реА- рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз рдХреЗ рд░реВрдк рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдареЛрд╕ рдЬрд░реВрд░рдд рд╣реИред

@ рдЪрд╛рд░43 , рд╢рд╛рдпрдж

рдбреЙрдХ-рдХрдореНрдкреЛрдЬрд╝ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЪрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рд╕реБрд╡рд┐рдзрд╛ рд╣реЛрдЧреА ...

+1

@esale - рд╣рд╛рдБ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рджреЗрдЦ рд╕рдХрддрд╛ рдерд╛ред рдХреБрдЫ DSL рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдордд рдЬрд╛рдУред рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рдХреБрдЫ рдЕрдиреНрдп рдЯреВрд▓ рдХреЗ рд╕рд╛рде рдбреЙрдХрдЯрд░-рдХрдореНрдкреЛрдЬрд╝ рдлрд╛рдЗрд▓ рдХрд░реЗрдВ? рдХреНрдпрд╛ рд╣рдо рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рдкрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

рдпрджрд┐ рдЖрдк .env рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╢реЗрд▓ рдХрдорд╛рдВрдб рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ

eval "echo \"$(cat .env.example)\"" > .env

рдЙрджрд╛рд╣рд░рдг .env.example рдлрд╝рд╛рдЗрд▓

DOCKER_BIN=$(which docker)
DOCKER_COMPOSE_BIN=$(which docker-compose)

.Env рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ

DOCKER_BIN=/snap/bin/docker
DOCKER_COMPOSE_BIN=/snap/bin/docker-compose
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

Hendrik-H picture Hendrik-H  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

guycalledseven picture guycalledseven  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

saulshanabrook picture saulshanabrook  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

leiblix picture leiblix  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

squeaky-pl picture squeaky-pl  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ