How to read environment variable in Nodejs?

I am trying to read a environment file through docker compose.

My problem is my code only read the first line of the variable value.

  • Why is my docker CI image not reproducible / running everywhere
  • Docker - Namespaces query [closed]
  • Apparmor on Docker Swarm
  • “meteor run --production” with MONGO_URL vs. bundling
  • Moving docker-compose containersets around between hosts
  • Docker container only accessible by another
  • My test.env

    NODE_ENV=development
    ## Not the actual key ##
    RSA_PUBLIC=-----BEGIN PUBLIC KEY-----
    CIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyRaUPVDIx3e1d/qadcNc
    D5TfmAfjCKlTajQPEitF8tNtQKRQc9yZqJjkNwtvctlxmkBmfot5dPqW/nAZhfse
    AAY5AKnAPAHrOLrzrGWvXE1NkjuONZq9cTqWludyZp7jH0md1q/D7shZMwL2hEee
    gaaM5CWH7nIZ6CASDA9K46NJYyoXw4/sZsUtuuKbUP3W1LlJcaBFIpRRKkv2dEdd
    ddqN8yHjkjKNtHi0UtRCjxA6dOuUdMvTiTHiycGwoC6sap0THF4lWHBZb/GXFaeD
    adce7iDq5bhbMNT3YfXHlq3MMMJSCJltnVS7DArij/Xf6vF/6chvlI4S9iIZNped
    FEEDAAEE
    -----END PUBLIC KEY-----
    

    My docker-compose

    web:
        build: .   
        env_file:
          - test.env
        //more
    

    I was able to read NODE_ENV in my app.js file with

    console.log(process.env.NODE_ENV) ==> output development

    but console.log(process.env.RSA_PUBLIC) ==> only output -----BEGIN PUBLIC KEY-----

    which is the first line of the key.

    and make my jwt token validation failed with

    PEM_read_bio_PUBKEY failed
    

    I am not sure how to fix this. Can anyone help me about it? Thanks a lot!

  • How to use docker with gradle while having private docker registry server
  • How to configure a Docker container to be reachable by container_ip:port from outside the host machine?
  • Docker Webapp doesn't show up
  • Docker to VM Networking
  • Docker push fails, too many redirects
  • Docker access elasticsearch endpoint from host
  • 2 Solutions collect form web for “How to read environment variable in Nodejs?”

    The solution for this might differ by linebreak style of your OS, but I solved this issue by replacing linebreak with \n(which makes your key a single line string), and then read it on server by replacing \n with \n

    process.env.RSA_PUBLIC.replace(/\\n/g, '\n')
    

    Two thoughts:

    1. How do you store the variable? Do you use the process.env directly, or something like dotenv?

    2. Did you try storing without the "-----BEGIN PUBLIC KEY-----" and "-----END PUBLIC KEY-----" lines?

    Docker will be the best open platform for developers and sysadmins to build, ship, and run distributed applications.