node
, package managers and build toolsIn order to keep them small and lightweight, the alpine
based images do not include build tools like make
, gcc
, g++
and the like, so some packages that require them like node-sass
or node-gyp
won't work out of the box. However, the more robust debian
based images do include those tools and should meet those needs.
 This image is under development and may not be as stable as versioned images. This image is based on a recent version of alpine and compiles a recent version of node
from source. Package versions are not pinned, instead https://npmjs.org/install.sh
is executed to install a current version of npm
, which is then used to install current versions of the packages.
 This image is under development and may not be as stable as versioned images. This image is based on node:latest
. Package versions are not pinned, instead the included npm
executable is used to install current versions of the packages.
 Based on alpine:3.4
with node
v7.0 compiled from source.
 Based onnode:7.0-wheezy
.
Essentially, this is just a set of shell scripts that manage a Node.js docker image. The docker image includes a script (run-as-user
) that allows commands to run as either the current user or the owner/group of the current directory, which the shell scripts take advantage of to make sure files are written with appropriate permissions rather than root.
The images contain the latest stable node
and npm
binaries for debian:jessie
and alpine:3.4
. npm
has been used to install various build tools globally. When using the shell scripts available in the source repository, the current directory is mounted into /src
in the container and a wrapper script executes npm
as a user who's uid
and gid
matches those properties on that directory. This way any output is written as the directory owner/group instead of root or a random user.
If you need additional modules and/or wrapper scripts let me know.
This assumes that you already have Docker installed. A running docker
daemon is required. You probably want to be able to run docker commands without sudo, but even if you excute the scripts with sudo files will be written with the appropriate uid
and gid
.
Several wrapper scripts are available in the source repository:
Installation is just a matter of putting them somewhere in your path and making them executable. An installation script is available and can be executed with a shell curl
+sh -s
command. Simply pass in your command arguments normally.
Usage
install.sh COMMAND [TAG [PREFIX]]
Synopsys
Install a mkenney/npm container execution script locally
Options
COMMAND - Required, the name of the command to install (bower, gulp, npm, etc.)
TAG - Optional, the image tag to use. Default 'latest'
PREFIX - Optional, the location to install the command script. Default '$HOME/bin'
Examples
$ curl -L https://raw.githubusercontent.com/mkenney/docker-npm/master/bin/install.sh | bash -s gulp 7.0-alpine $HOME/bin
$ bash ./install.sh gulp 7.0-alpine $HOME/bin
[command] self-update
Each of the scripts have a self-update
command which pulls down the latest docker image (which all the scripts share) and then updates the shell script itself. If you don't have write permissions on the shell script you'll get a permissions error, you can run the self-update command with sudo
if necessary.
Modified the alpine
-based dockerfiles to retain the build tools
This change increases the image size by ~45MB but its still around 1/2 the size of the debian
-based images.
Please let me know if you have any problems.
travis-ci
tests to test and validate both the installation script and the individual wrapper scripts
The install script is using bash
instead of sh
because the version of sh
installed on travis-ci
would constantly have a syntax error on the usage
function definition, regardless of how it was defined. Both of these failed:
function usage { ... }
```sh
usage() {
...
}
At some point I'll get that figured out and switch it back to `sh`.
Please let me know if you have any problems.
Please let me know if you have any problems.
node
to 7.0.0 in the alpine
image.Please let me know if you have any problems.
Please let me know if you have any problems.
master
branch and the Debian build into it's own debian
branch and made corresponding changes on hub.docker.com.--allow-root
option to the bower
script to resolve issue #4.self-update
commands.self-update
command in the scripts to resolve issue #8.Please let me know if you have any problems.
markdown-styles
) and a script to run it (generate-md
).Please let me know if that change causes any issues.
travis-ci
builds. This way, even if builds are failing the image on DockerHub should remain the last stable image at all times.
Please let me know if you have any problems.
Please let me know if you have any problems.
npm
to the latest stable version in the debian
image.node
from source in the alpine
image because the version installed by n
was compiled with a different prefix than the apk
packages which made a mess. I set the build to use the same install prefix as the node:latest
image (/usr/local
).shadow
package.Please let me know if you run into any problems.
alpine:latest
doesn't have the shadow
available (at the moment) so the /run-as-user
script wasn't functioning correctly. Added the edge/testing
repo, installed shadow
and also went ahead and updated npm
to the latest available version (3.10.2
).Please let me know if you run into any problems.
bower
to the image and a wrapper script to the repository.node
wrapper script to the repository.~/.ssh/
directory into the container to support access to private repositories. If that directory is mounted, then npm
and bower
will run as the uid
/gid
that owns that ~/.ssh/
directory (hopefully you), otherwise it will run as the project directories uid
and gid
as usual.alpine:latest
Please let me know if you run into any problems.
run-as-user
script so that it doesn't require specifying which user account in the container should be modified
dev
user. This required updating both the image and the wrapper scripts, if you use the wrapper scripts you should run:
sudo npm self-update
sudo gulp self-update
sudo grunt self-update
Removed the as-user
script (and renamed it run-as-user
) and put it in a separate repo as it's used in several images. Let me know if you have any trouble, this is the first image I've switched over.
Added a wrapper script to the container that executes npm
, gulp
and grunt
commands as a user who's uid
and gid
matches those properties on the current directory. This way any files are installed as the directory owner/group instead of root or a random user.
If you've been using the previous version of the included shell scripts from the project's /bin
directory you will probably need to update the permissions of files created using them or the new scripts are likely to have permissions errors because previously the files would have been created by the root
user. This command should take care of it for you but make sure you understand what it will do before you run it. I can't help you if you hose your system.
sudo chown -R $(stat -c '%u' .):$(stat -c '%g' .) ./
If you haven't been using the included scripts, then you don't need to do anything.
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。