docker run -it --rm -v "$PWD":/app -w /app node:7 node index.js

# /docker-compose.yml
version: '2'

services:
    db:
        # Quelle image doit-on télécharger ?
        image: postgres

        # Configuration des accès via des variables d’environnement
        environment:
            - POSTGRES_USER=username
            - POSTGRES_PASSWORD=password

    node:
        image: node:7
        working_dir: /app
        command: "node index.js"

        # Partage du dossier courant dans /app du container
        volumes:
            - .:/app
        
        # Le container sera accessible depuis l’hôte sur le port 3000
        expose: 
            - "3000"

        # On ne démarre pas tant que le container db n’est pas dispo
        depends_on:
            - db
        
        # `db` et `node` doivent pouvoir communiquer
        links:
            - db

docker-compose run --rm --no-deps node bash -ci 'npm install'

$ ls -al node_modules

total 3184
drwxrwxrwx 784 root root 32768 Jan 26 17:47 .
drwxr-xr-x  19 root root  4096 Jan 26 17:46 ..
drwxr-xr-x   3 root root  4096 Jan 26 17:47 abab
drwxr-xr-x   2 root root  4096 Jan 26 17:47 abbrev
drwxr-xr-x   3 root root  4096 Jan 26 17:47 accepts

services:
    node:
        user: "${UID}:${GID}"

 

export $UID = $(id -u)
export $GID = $(id -g)

install:
    docker-compose run --rm --no-deps node bash -ci 'npm install'

# On supprime les anciennes dépendances installées en root
$ sudo rm -Rf node_modules/

# Et on les réinstalle avec notre nouvelle commande.
$ make install

# On vérifie les permissions...
$ ls -al node_modules

total 3184
drwxrwxrwx 784 jpetitcolas jpetitcolas 32768 Jan 26 17:47 .
drwxr-xr-x  19 jpetitcolas jpetitcolas  4096 Jan 26 17:46 ..
drwxr-xr-x   3 jpetitcolas jpetitcolas  4096 Jan 26 17:47 abab
drwxr-xr-x   2 jpetitcolas jpetitcolas  4096 Jan 26 17:47 abbrev
drwxr-xr-x   3 jpetitcolas jpetitcolas  4096 Jan 26 17:47 accepts

{
    // ... 
    “my-private-bundle”: “Acme/my-private-bundle#develop”
}

services:
    node:
        volumes:
            - $(SSH_AUTH_SOCK):/ssh_agent
        environment:
            - SSH_AUTH_SOCK=/ssh_agent

docker run --rm -it \
    -v `pwd`:/app \
    -v $(SSH_AUTH_SOCK):/ssh_agent \
    -e SSH_AUTH_SOCK=/ssh_agent \
    -e USER_ID=$USER_ID \
    node bash -ci " \
        [...]
        cp -f /app/docker/node/ssh_config /home/dummy/.ssh/config && \
        su dummy -c 'ssh -T git@github.com' \
    "

docker run --rm -it \
    -v `pwd`:/app \
    -v $(SSH_AUTH_SOCK):/ssh_agent \
    -e SSH_AUTH_SOCK=/ssh_agent \
    -e USER_ID=$USER_ID \
    node bash -ci " \
        useradd -u $USER_ID dummy && \
        mkdir -p /home/dummy/.ssh /home/dummy/.npm && \
        chown -R dummy /home/dummy && \
        cat /app/docker/node/ssh_config > /home/dummy/.ssh/config && \
        su dummy -c 'npm install' \