How do I pass environment variables to Docker containers?

前端 未结 14 1155
独厮守ぢ
独厮守ぢ 2020-11-22 11:15

I\'m new to Docker, and it\'s unclear how to access an external database from a container. Is the best way to hard-code in the connection string?

# Dockerfil         


        
14条回答
  •  渐次进展
    2020-11-22 11:35

    You can pass environment variables to your containers with the -e flag.

    An example from a startup script:

    sudo docker run -d -t -i -e REDIS_NAMESPACE='staging' \ 
    -e POSTGRES_ENV_POSTGRES_PASSWORD='foo' \
    -e POSTGRES_ENV_POSTGRES_USER='bar' \
    -e POSTGRES_ENV_DB_NAME='mysite_staging' \
    -e POSTGRES_PORT_5432_TCP_ADDR='docker-db-1.hidden.us-east-1.rds.amazonaws.com' \
    -e SITE_URL='staging.mysite.com' \
    -p 80:80 \
    --link redis:redis \  
    --name container_name dockerhub_id/image_name
    

    Or, if you don't want to have the value on the command-line where it will be displayed by ps, etc., -e can pull in the value from the current environment if you just give it without the =:

    sudo PASSWORD='foo' docker run  [...] -e PASSWORD [...]
    

    If you have many environment variables and especially if they're meant to be secret, you can use an env-file:

    $ docker run --env-file ./env.list ubuntu bash
    

    The --env-file flag takes a filename as an argument and expects each line to be in the VAR=VAL format, mimicking the argument passed to --env. Comment lines need only be prefixed with #

提交回复
热议问题