A Docker image for creating ambitious Ember applications ๐น
- Ember-CLI + Node.js (Current & LTS) + Yarn
- Table of Contents
- Image Contents
- Dockerfiles and tags
- Ember-CLI v3.1.4
- Ember-CLI v3.1.3
- Ember-CLI v2.18.2 (Ember LTS):
- Ember-CLI v3.1.2
- Ember-CLI v3.1.1
- Ember-CLI v3.1.0
- Ember-CLI v3.0.4
- Ember-CLI v3.0.3
- Ember-CLI v3.0.2
- Ember-CLI v3.0.1
- Ember-CLI v3.0.0
- Ember-CLI v2.18.2
- Ember-CLI v2.18.1
- Ember-CLI v2.18.0
- Ember-CLI v2.17.2
- Ember-CLI v2.17.1
- Ember-CLI v2.17.0
- Ember-CLI v2.16.2
- Ember-CLI v2.16.1
- Ember-CLI v2.16.0
- Ember-CLI v2.15.1
- Ember-CLI v2.15.0
- Ember-CLI v2.14.2
- Ember-CLI v2.14.1
- Ember-CLI v2.14.0
- Ember-CLI v2.13.3
- Ember-CLI v2.13.2
- Ember-CLI v2.13.1
- Ember-CLI v2.12.3
- Usage
- FAQ
- How do you keep up with new versions?
- What happens with outdated Node.js versions between LTS releases?
- You said this image has everything I need to work with Ember.js, but where's Bower?
- Where's the
latest
tag? - Since 2.16.0,
ember test -s
ends up showing a Chrome error regarding some SUID sandbox. How do I make it work? - I have a custom Dockerfile based on yours, and my
USER
is no longer root because of reason X. With tags between 2.16.0 and 3.0.0,ember test -s
ends up showing an "operation not permitted" error. How do I make it work?
This image has everything you need to work with Ember.js:
- Debian Jessie / Alpine Linux
- Node.js
- Yarn (npm's still there, don't worry)
- PhantomJS (for Ember-CLI < 3.0.0, why?)
- Watchman
- Google Chrome (why?)
- And, of course, Ember-CLI
All perfectly versioned, up-to-date and working.
Debian:
- w/Node.js v10.1.0 | Dockerfile
docker pull sergiolepore/ember-cli:3.1.4-node_10.1.0
Yarn v1.6.0
Watchman v4.9.0
Google Chrome stable
- w/Node.js v8.11.1 (Node LTS) | Dockerfile
docker pull sergiolepore/ember-cli:3.1.4-node_8.11.1
Yarn v1.5.1
Watchman v4.9.0
Google Chrome stable
Alpine:
- w/Node.js v10.1.0 | Dockerfile
docker pull sergiolepore/ember-cli:3.1.4-node_10.1.0-alpine
Yarn v1.6.0
Watchman v4.9.0
Chromium Edge
- w/Node.js v8.11.1 (Node LTS) | Dockerfile
docker pull sergiolepore/ember-cli:3.1.4-node_8.11.1-alpine
Yarn v1.5.1
Watchman v4.9.0
Chromium Edge
Debian:
- w/Node.js v10.0.0 | Dockerfile
docker pull sergiolepore/ember-cli:3.1.3-node_10.0.0
Yarn v1.6.0
Watchman v4.9.0
Google Chrome stable
- w/Node.js v8.11.1 (Node LTS) | Dockerfile
docker pull sergiolepore/ember-cli:3.1.3-node_8.11.1
Yarn v1.5.1
Watchman v4.9.0
Google Chrome stable
Alpine:
- w/Node.js v10.0.0 | Dockerfile
docker pull sergiolepore/ember-cli:3.1.3-node_10.0.0-alpine
Yarn v1.6.0
Watchman v4.9.0
Chromium Edge
- w/Node.js v8.11.1 (Node LTS) | Dockerfile
docker pull sergiolepore/ember-cli:3.1.3-node_8.11.1-alpine
Yarn v1.5.1
Watchman v4.9.0
Chromium Edge
Debian:
- w/Node.js v9.11.1 | Dockerfile
docker pull sergiolepore/ember-cli:2.18.2-node_9.11.1
Yarn v1.5.1
Watchman v4.9.0
Google Chrome stable
- w/Node.js v8.11.1 (Node LTS) | Dockerfile
docker pull sergiolepore/ember-cli:2.18.2-node_8.11.1
Yarn v1.5.1
Watchman v4.9.0
Google Chrome stable
Alpine:
- w/Node.js v9.11.1 | Dockerfile
docker pull sergiolepore/ember-cli:2.18.2-node_9.11.1-alpine
Yarn v1.5.1
Watchman v4.9.0
Chromium Edge
- w/Node.js v8.11.1 (Node LTS) | Dockerfile
docker pull sergiolepore/ember-cli:2.18.2-node_8.11.1-alpine
Yarn v1.5.1
Watchman v4.9.0
Chromium Edge
Debian:
- w/Node.js v9.11.1 | Dockerfile
docker pull sergiolepore/ember-cli:3.1.2-node_9.11.1
Yarn v1.5.1
Watchman v4.9.0
Google Chrome stable
- w/Node.js v8.11.1 (Node LTS) | Dockerfile
docker pull sergiolepore/ember-cli:3.1.2-node_8.11.1
Yarn v1.5.1
Watchman v4.9.0
Google Chrome stable
Alpine:
- w/Node.js v9.11.1 | Dockerfile
docker pull sergiolepore/ember-cli:3.1.2-node_9.11.1-alpine
Yarn v1.5.1
Watchman v4.9.0
Chromium Edge
- w/Node.js v8.11.1 (Node LTS) | Dockerfile
docker pull sergiolepore/ember-cli:3.1.2-node_8.11.1-alpine
Yarn v1.5.1
Watchman v4.9.0
Chromium Edge
- w/Node.js v9.11.1 | Dockerfile
docker pull sergiolepore/ember-cli:3.1.1-node_9.11.1
Yarn v1.5.1
Watchman v4.9.0
Google Chrome stable
- w/Node.js v8.11.1 (Node LTS) | Dockerfile
docker pull sergiolepore/ember-cli:3.1.1-node_8.11.1
Yarn v1.5.1
Watchman v4.9.0
- `Google Chrome stable
- w/Node.js v9.11.1 | Dockerfile
docker pull sergiolepore/ember-cli:3.1.0-node_9.11.1
Yarn v1.5.1
Watchman v4.9.0
Google Chrome stable
- w/Node.js v8.11.1 (Node LTS) | Dockerfile
docker pull sergiolepore/ember-cli:3.1.0-node_8.11.1
Yarn v1.5.1
Watchman v4.9.0
- `Google Chrome stable
- w/Node.js v9.11.1 | Dockerfile
docker pull sergiolepore/ember-cli:3.0.4-node_9.11.1
Yarn v1.5.1
Watchman v4.9.0
Google Chrome stable
- w/Node.js v8.11.1 (Node LTS) | Dockerfile
docker pull sergiolepore/ember-cli:3.0.4-node_8.11.1
Yarn v1.5.1
Watchman v4.9.0
Google Chrome stable
- w/Node.js v9.11.1 | Dockerfile
docker pull sergiolepore/ember-cli:3.0.3-node_9.11.1
Yarn v1.5.1
Watchman v4.9.0
Google Chrome stable
- w/Node.js v8.11.1 (Node LTS) | Dockerfile
docker pull sergiolepore/ember-cli:3.0.3-node_8.11.1
Yarn v1.5.1
Watchman v4.9.0
Google Chrome stable
- w/Node.js v9.11.1 | Dockerfile
docker pull sergiolepore/ember-cli:3.0.2-node_9.11.1
Yarn v1.5.1
Watchman v4.9.0
Google Chrome stable
- w/Node.js v8.11.1 (Node LTS) | Dockerfile
docker pull sergiolepore/ember-cli:3.0.2-node_8.11.1
Yarn v1.5.1
Watchman v4.9.0
Google Chrome stable
- w/Node.js v9.11.1 | Dockerfile
docker pull sergiolepore/ember-cli:3.0.1-node_9.11.1
Yarn v1.5.1
Watchman v4.9.0
Google Chrome stable
- w/Node.js v8.11.1 (Node LTS) | Dockerfile
docker pull sergiolepore/ember-cli:3.0.1-node_8.11.1
Yarn v1.5.1
Watchman v4.9.0
Google Chrome stable
- w/Node.js v9.5.0 Experimental | Dockerfile
docker pull sergiolepore/ember-cli:3.0.0-node_9.5.0-experimental
- Contains exactly the same dependencies as
3.0.0-node_9.5.0
- Now working as non-root
- Support for Google Chrome running as non-root
- All the goodies will be included in the next image tag
- w/Node.js v9.5.0 | Dockerfile
docker pull sergiolepore/ember-cli:3.0.0-node_9.5.0
Yarn v1.3.2
Watchman v4.9.0
Google Chrome stable
- w/Node.js v8.9.4 (Node LTS) | Dockerfile
docker pull sergiolepore/ember-cli:3.0.0-node_8.9.4
Yarn v1.3.2
Watchman v4.9.0
Google Chrome stable
- w/Node.js v9.5.0 | Dockerfile
docker pull sergiolepore/ember-cli:2.18.2-node_9.5.0
Yarn v1.3.2
PhantomJS v2.1.14
Watchman v4.9.0
Google Chrome stable
- w/Node.js v8.9.4 (Node LTS) | Dockerfile
docker pull sergiolepore/ember-cli:2.18.2-node_8.9.4
Yarn v1.3.2
PhantomJS v2.1.14
Watchman v4.9.0
Google Chrome stable
- w/Node.js v9.5.0 | Dockerfile
docker pull sergiolepore/ember-cli:2.18.1-node_9.5.0
Yarn v1.3.2
PhantomJS v2.1.14
Watchman v4.9.0
Google Chrome stable
- w/Node.js v8.9.4 (Node LTS) | Dockerfile
docker pull sergiolepore/ember-cli:2.18.1-node_8.9.4
Yarn v1.3.2
PhantomJS v2.1.14
Watchman v4.9.0
Google Chrome stable
- w/Node.js v9.5.0 | Dockerfile
docker pull sergiolepore/ember-cli:2.18.0-node_9.5.0
Yarn v1.3.2
PhantomJS v2.1.14
Watchman v4.9.0
Google Chrome stable
- w/Node.js v8.9.4 (Node LTS) | Dockerfile
docker pull sergiolepore/ember-cli:2.18.0-node_8.9.4
Yarn v1.3.2
PhantomJS v2.1.14
Watchman v4.9.0
Google Chrome stable
- w/Node.js v8.9.4 (Node LTS) | Dockerfile
docker pull sergiolepore/ember-cli:2.17.2-node_8.9.4
Yarn v1.3.2
PhantomJS v2.1.14
Watchman v4.9.0
Google Chrome stable
- w/Node.js v6.12.3 | Dockerfile
docker pull sergiolepore/ember-cli:2.17.2-node_6.12.3
Yarn v1.3.2
PhantomJS v2.1.14
Watchman v4.9.0
Google Chrome stable
- w/Node.js v8.9.4 (Node LTS) | Dockerfile
docker pull sergiolepore/ember-cli:2.17.1-node_8.9.4
Yarn v1.3.2
PhantomJS v2.1.14
Watchman v4.9.0
Google Chrome stable
- w/Node.js v6.12.3 | Dockerfile
docker pull sergiolepore/ember-cli:2.17.1-node_6.12.3
Yarn v1.3.2
PhantomJS v2.1.14
Watchman v4.9.0
Google Chrome stable
- w/Node.js v8.9.4 (Node LTS) | Dockerfile
docker pull sergiolepore/ember-cli:2.17.0-node_8.9.4
Yarn v1.3.2
PhantomJS v2.1.14
Watchman v4.9.0
Google Chrome stable
- w/Node.js v6.12.3 | Dockerfile
docker pull sergiolepore/ember-cli:2.17.0-node_6.12.3
Yarn v1.3.2
PhantomJS v2.1.14
Watchman v4.9.0
Google Chrome stable
- w/Node.js v8.9.4 (Node LTS) | Dockerfile
docker pull sergiolepore/ember-cli:2.16.2-node_8.9.4
Yarn v1.3.2
PhantomJS v2.1.14
Watchman v4.9.0
Google Chrome stable
- w/Node.js v6.12.3 | Dockerfile
docker pull sergiolepore/ember-cli:2.16.2-node_6.12.3
Yarn v1.3.2
PhantomJS v2.1.14
Watchman v4.9.0
Google Chrome stable
- w/Node.js v8.9.4 (Node LTS) | Dockerfile
docker pull sergiolepore/ember-cli:2.16.1-node_8.9.4
Yarn v1.3.2
PhantomJS v2.1.14
Watchman v4.9.0
Google Chrome stable
- w/Node.js v6.12.3 | Dockerfile
docker pull sergiolepore/ember-cli:2.16.1-node_6.12.3
Yarn v1.3.2
PhantomJS v2.1.14
Watchman v4.9.0
Google Chrome stable
- w/Node.js v8.4.0 | Dockerfile
docker pull sergiolepore/ember-cli:2.16.0-node_8.4.0
Yarn v0.27.5
PhantomJS v2.1.14
Watchman v4.9.0
Google Chrome stable
- w/Node.js v6.11.3 | Dockerfile
docker pull sergiolepore/ember-cli:2.16.0-node_6.11.3
Yarn v0.27.5
PhantomJS v2.1.14
Watchman v4.9.0
Google Chrome stable
- w/Node.js v8.4.0 | Dockerfile
docker pull sergiolepore/ember-cli:2.15.1-node_8.4.0
Yarn v0.27.5
PhantomJS v2.1.14
Watchman v4.7.0
Google Chrome stable
- w/Node.js v6.11.3 | Dockerfile
docker pull sergiolepore/ember-cli:2.15.1-node_6.11.3
Yarn v0.27.5
PhantomJS v2.1.14
Watchman v4.7.0
Google Chrome stable
- w/Node.js v8.4.0 | Dockerfile
docker pull sergiolepore/ember-cli:2.15.0-node_8.4.0
Yarn v0.27.5
PhantomJS v2.1.14
Watchman v4.7.0
Google Chrome stable
- w/Node.js v6.11.2 | Dockerfile
docker pull sergiolepore/ember-cli:2.15.0-node_6.11.2
Yarn v0.27.5
PhantomJS v2.1.14
Watchman v4.7.0
Google Chrome stable
- w/Node.js v8.2.1 | Dockerfile
docker pull sergiolepore/ember-cli:2.14.2-node_8.2.1
Yarn v0.27.5
PhantomJS v2.1.14
Watchman v4.7.0
- w/Node.js v6.11.2 | Dockerfile
docker pull sergiolepore/ember-cli:2.14.2-node_6.11.2
Yarn v0.27.5
PhantomJS v2.1.14
Watchman v4.7.0
- w/Node.js v8.1.2 | Dockerfile
docker pull sergiolepore/ember-cli:2.14.1-node_8.1.2
Yarn v0.24.4
PhantomJS v2.1.14
Watchman v4.7.0
- w/Node.js v6.11.2 | Dockerfile
docker pull sergiolepore/ember-cli:2.14.1-node_6.11.2
Yarn v0.27.5
PhantomJS v2.1.14
Watchman v4.7.0
- w/Node.js v8.1.2 | Dockerfile
docker pull sergiolepore/ember-cli:2.14.0-node_8.1.2
Yarn v0.24.4
PhantomJS v2.1.14
Watchman v4.7.0
- w/Node.js v6.11.2 | Dockerfile
docker pull sergiolepore/ember-cli:2.14.0-node_6.11.2
Yarn v0.27.5
PhantomJS v2.1.14
Watchman v4.7.0
- w/Node.js v8.1.2 | Dockerfile
docker pull sergiolepore/ember-cli:2.13.3-node_8.1.2
Yarn v0.24.4
PhantomJS v2.1.14
Watchman v4.7.0
- w/Node.js v6.11.2 | Dockerfile
docker pull sergiolepore/ember-cli:2.13.3-node_6.11.2
Yarn v0.27.5
PhantomJS v2.1.14
Watchman v4.7.0
- w/Node.js v7.10.0 | Dockerfile
docker pull sergiolepore/ember-cli:2.13.2-node_7.10.0
Yarn v0.24.4
PhantomJS v2.1.14
Watchman v4.7.0
- w/Node.js v6.10.3 | Dockerfile
docker pull sergiolepore/ember-cli:2.13.2-node_6.10.3
Yarn v0.24.4
PhantomJS v2.1.14
Watchman v4.7.0
- w/Node.js v7.10.0 | Dockerfile
docker pull sergiolepore/ember-cli:2.13.1-node_7.10.0
Yarn v0.24.4
PhantomJS v2.1.14
Watchman v4.7.0
- w/Node.js v6.10.3 | Dockerfile
docker pull sergiolepore/ember-cli:2.13.1-node_6.10.3
Yarn v0.24.4
PhantomJS v2.1.14
Watchman v4.7.0
- w/Node.js v6.10.3 | Dockerfile
docker pull sergiolepore/ember-cli:2.12.3-node_6.10.3
Yarn v0.24.4
Bower v1.8.0
PhantomJS v2.1.14
Watchman v4.7.0
docker pull sergiolepore/ember-cli:x.x.x-node_x.x.x
- Container working directory is
/myapp
, so you might want to mount a volume there (or override it) - Port
7020
is exposed (livereload) - Port
4200
is exposed (app) - Port
7357
is exposed (TestEm) ember server
is the default command to be run when executing the image
# ember blueprints
$ docker run -it --rm \
-v /my/project/directory:/myapp \
sergiolepore/ember-cli:3.1.4-node_10.1.0 \
ember init --yarn
$ docker run -it --rm \
-v /my/project/directory:/myapp \
sergiolepore/ember-cli:3.1.4-node_10.1.0 \
ember g route hamsters
# yarn
$ docker run -it --rm \
-v /my/project/directory:/myapp \
sergiolepore/ember-cli:3.1.4-node_10.1.0 \
yarn add something@1.2.3
# server
$ docker run -it \
-v /my/project/directory:/myapp \
-p 4200:4200 \
-p 7020:7020 \
sergiolepore/ember-cli:3.1.4-node_10.1.0
# working on Windows?
$ docker run -it \
-v /my/project/directory:/myapp \
-p 4200:4200 \
-p 7020:7020 \
sergiolepore/ember-cli:3.1.4-node_10.1.0 \
ember server --watcher polling
# bash
$ docker run -it \
-v /my/project/directory:/myapp \
-p 4200:4200 \
-p 7020:7020 \
sergiolepore/ember-cli:3.1.4-node_10.1.0 \
bash
node@container-id:/myapp# ember init --yarn
node@container-id:/myapp# ember g route hamsters
node@container-id:/myapp# yarn add something@1.2.3
node@container-id:/myapp# ember server
- A
docker-compose.yml
file in/my/project/directory
services:
emberapp:
image: sergiolepore/ember-cli:3.1.4-node_10.1.0
ports:
- "4200:4200"
- "7020:7020"
- "7357:7357"
volumes:
- .:/myapp
$ docker-compose run --rm emberapp ember init --yarn
$ docker-compose up
Here's what I've been doing: each time a final release of Ember-CLI gets published, I check for the latest LTS
and Current
Node.js versions and I generate a new Dockerfile
based on that. This ensures there will always be an up-to-date image containing the latest security patches and bugfixes from both projects. Alongside those changes, I update all dependencies to their latest version.
I'll try to keep parity between Node.js and Ember.js LTS versions for as long as possible (Ember 2.12.x - Node 6.x, for example).
Sorry, but when a major version of Node.js stops getting updates, I stop supporting it as well. If you think you're stuck on one of those versions, please consider upgrading to, at least, the next available LTS.
Bower is now an optional dependency since Ember-CLI 2.13, so I decided to exclude it from my v2.13+ images. If you still need it, I recommend you to create your own custom image:
FROM sergiolepore/ember-cli:x.x.x-node_x.x.x
RUN yarn global add bower@x.x.x
### ...
Sorry, but I don't believe in "latest" things ๐. No, seriously. Be aware of the version you're working with in order to avoid headaches. Always. ๐ฆ
Since 2.16.0, ember test -s
ends up showing a Chrome error regarding some SUID sandbox. How do I make it work?
This is one of those things that I really HATE about the Chrome integration.
In order to fix it, you'll have to edit your testem.js
file and configure a new argument, --no-sandbox
, for your mode: 'dev'
. A lot can be written about the implications, pros & cons of this, but I thought that this "solution" is the only one worth implementing. If you open the Dockerfile
, you'll notice that there's a patch that adds --no-sandbox
directly to the system so you don't have to add it to testem.js
, BUT it's being ignored for some reason. If I figure out how to make it work without having to edit the Test'em file, I'll ship the patch into a new Dockerfile. I will not update the old ones.
"But my Test'em file (pre Ember 3) can only have ONE custom config and it's set to
ci
! I cannot adddev
without losingci
!" - You, probably.
This is an issue ONLY for Ember-CLI versions prior to 3.0.0
. The new Test'em allows you to have different modes with their custom, isolated args. If you are using the old Test'em, you'll have to remove the mode key entirely and just use the array of args for the Chrome
key.
Below are the workarounds for pre and post Ember-CLI 3.
/* eslint-env node */
module.exports = {
// ...etc
browser_args: {
Chrome: [
'--no-sandbox', // new arg for 'dev' mode. Below are the default args for 'ci'
'--disable-gpu',
'--headless',
'--remote-debugging-port=0',
'--window-size=1440,900'
]
}
};
module.exports = {
// ...etc
browser_args: {
Chrome: {
// common args for CI and Dev
all: [
'--disable-gpu',
'--headless',
'--remote-debugging-port=0',
'--window-size=1440,900'
],
// extra required arg for Dev (because it's running inside a container)
dev: '--no-sandbox',
// the default --no-sandbox for Travis CI (that's running inside a container)
ci: [
// --no-sandbox is needed when running Chrome inside a container
process.env.TRAVIS ? '--no-sandbox' : null,
].filter(Boolean)
}
}
}
If you are using an Alpine version, replace all "Chrome"
references with "Chromium"
.
I have a custom Dockerfile based on yours, and my USER
is no longer root because of reason X. With tags between 2.16.0 and 3.0.0, ember test -s
ends up showing an "operation not permitted" error. How do I make it work?
Versions <= 3.0.0 of this image had a weird issue with Google Chrome and USER
in the container. Using a non-root user required a HUGE seccomp profile to be passed to your container with EVERY SINGLE SYSCALL Chrome will or might perform, otherwise it will explode in your face with "operation not permitted".
Since 3.0.1
, the container runs as non-root and Chrome is finally working.