Docker run ubuntu:14.04 /bin/echo 'Hello world' fails on new Wndows boot2docker install #13741 Closed lwlsonjlg opened this issue Jun 4, 2015 18 comments. Installing Ubuntu. From your CLI run the following command: 👉 docker pull ubuntu. This will download the latest official Ubuntu image available. Next, we will create a Docker container running this Ubuntu image by entering this command: 👉 docker run -i -t ubuntu /bin/bash. The command will start the container, and you will then be.
- Ubuntu is a Debian-based Linux operating system that runs from the desktop to the cloud, to all your internet connected things. It is the world's most popular operating system across public clouds and OpenStack clouds. It is the number one platform for containers; from Docker to Kubernetes to LXD, Ubuntu can run your containers at scale.
- Docker install on Ubuntu 14.04 Docker Hello World Application Nginx image - share/copy files, Dockerfile Working with Docker images: brief introduction Docker image and container via docker commands (search, pull, run, ps, restart, attach, and rm) More on docker run command (docker run -it, docker run -rm, etc.) Docker Networks - Bridge.
- Ubuntu 14.04 Droplet; A non-root user with sudo privileges (Initial Server Setup with Ubuntu 14.04 explains how to set this up.) Step 1 — Installing Docker. First, install Docker if you haven’t already. The quickest way to install Docker is to download and install their installation script (you’ll be prompted for a sudo password).
I recently took it upon myself to rebuild a general-purpose home server – installing a new Intel 530 240GB solid-state drive to replace a “spinning rust” drive, and installing a fresh copy of Ubuntu 14.04 now that 14.04.1 has released and there is much less complaining online.

The “new hotness” that I’d like to discuss has been the use of Docker to containerize various processes. Docker gets a lot of press these days, but the way I see it is a way to ensure that your special snowflake applications and services don’t get the opportunity to conflict with one another. In my setup, I have four containers running:
- Plex Media Server, using the docker-plex configuration from Tim Haak
- SABnzbd+, also using a Dockerfile from Tim Haak (docker-sabnzbd)
- Sonarr – formerly known as NZBDrone, and a Mono/.NET competitor to Sickbeard, which I also like – with tuxeh/sonarr
- CouchPotato with setup from needo
I like the following things about Docker:
- Since it’s new, there are a lot of repositories and configuration instructions online for reference.
- I can make sure that applications like Sonarr/NZBDrone get the right version of Mono that won’t conflict with my base system.
- As a network administrator, I can ensure that only the necessary ports for a service get forwarded outside the container.
- If an application state gets messed up, it won’t impact the rest of the system as much – I can destroy and recreate the individual container by itself.
There are some drawbacks though:
- Because a lot of the images and Dockerfiles out there are community-based, there are some that don’t follow best practices or fall out of an update cycle.
- Software updates can become trickier if the application is unable to upgrade itself in-place; you may have to pull a new Dockerfile and hope that your existing configuration works with a new image.
- From a security standpoint, it’s best to verify exactly what an image or Dockerfile does before running it – for example, that it pulls content from official repositories (the docker-plex configuration is guilty of using a third-party repo, for example.)
To get started, on Ubuntu 14.04 you can install a stable version of Docker following these instructions, although the latest version has some additional features like docker exec that make “getting inside” containers to troubleshoot much easier. I was able to get all these containers running properly with the current stable version (1.0.1~dfsg1-0ubuntu1~ubuntu0.14.04.1). Once Docker is installed, you can grab each of the containers above with a combination of docker search and docker pull, then list the downloaded containers with docker images.
There are some quirks to remember. On the first run, you’ll need to docker run most of these containers and provide a hostname, box name, ports to forward and shared directories (known as volumes). On all subsequent runs, you can just use docker start $container_name – but I’ll describe a cheap and easy way of turning that command into an upstart service later. I generally save the start commands as shell scripts in /usr/local/bin/docker-start/*.sh so that I can reference them or adjust them later. The start commands I’ve used look like:
Plex
docker run -d -h plex --name='plex' -v /etc/docker/plex:/config -v /mnt/nas:/data -p 32400:32400 timhaak/plex
SABnzbd+
docker run -d -h sabnzbd --name='sabnzbd' -v /etc/docker/sabnzbd:/config -v /mnt/nas:/data -p 8080:8080 -p 9090:9090 timhaak/sabnzbd
Sonarr
docker run -d -h sonarr --name='sonarr' -v /etc/docker/sonarr:/config -v /mnt/nas:/data -p 8989:8989 tuxeh/sonarr
CouchPotato
docker run -d -h couchpotato --name='couchpotato' -e EDGE=1 -v /etc/docker/couchpotato:/config -v /mnt/nas:/data -v /etc/localtime:/etc/localtime:ro -p 5050:5050 needo/couchpotato
These applications have a “/config” and a “/data” shared volume defined. /data points to “/mnt/nas”, which is a CIFS share to a network attached storage appliance mounted on the host. /config points to a directory structure I created for each application on the host in /etc/docker/$container_name. I generally apply “chmod 777” permissions to each configuration directory until I find out what user ID the container is writing as, then lock it down from there.
For each initial start command, I choose to run the service as a daemon with -d. I also set a hostname with the “-h” parameter, as well as a friendly container name with “–name”; otherwise Docker likes to reference containers with wild adjectives combined with scientists, like “drunk_heisenberg”.
Each of these containers generally has a set of instructions to get up and running, whether it be on Github, the developer’s own site or the Docker Hub. Some, like SABnzbd+, just require that you go to http://yourserverip:8080/ and complete the setup wizard. Plex required an additional set of configuration steps described at the original repository:
- Once Plex starts up on port 32400, access http://yourserverip:32400/web/ and confirm that the interface loads.
- Switch back to your host machine, and find the place where the /config directory was mounted (in the example above, it’s /etc/docker/plex). Enter the Library/Application Support/Plex Media Server directory and edit the Preferences.xml file. In the <Preferences> tag, add the following attribute:Â allowedNetworks=”192.168.1.0/255.255.255.0″ where the IP address range matches that of your home network. In my case, the entire file looked like:
<?xml version='1.0' encoding='utf-8'?>
<Preferences MachineIdentifier='(guid)' ProcessedMachineIdentifier='(another_guid)' allowedNetworks='192.168.1.0/255.255.255.0' /> - Run docker stop plex && docker start plex to restart the container, then load http://yourserverip:32400/web/ again. You should be prompted to accept the EULA and can now add library locations to the server.
Sonarr needed to be updated (from the NZBDrone branding) as well. From the GitHub README, you can enable in-container upgrades:
[C]onfigure Sonarr to use the update script in /etc/service/sonarr/update.sh
. This is configured under Settings > (show advanced) > General > Updates > change Mechanism to Script.
To automatically ensure these containers start on reboot, you can either use restart policies (Docker 1.2+) or write an upstart script to start and stop the appropriate container. I’ve modified the example from the Docker website slightly to stop the container as well:
Docker Run Ubuntu 14.04
description 'SABnzbd Docker container'
author 'Jake'
start on filesystem and started docker
stop on runlevel [!2345]respawn
script
/usr/bin/docker start -a sabnzbd
end script
pre-stop exec /usr/bin/docker stop sabnzbd
Copy this script to /etc/init/sabnzbd.conf; you can then copy it to plex, couchpotato, and sonarr.conf and change the name of the container and title in each. You can then test it by rebooting your system and running “docker ps -a” to ensure that all containers come up cleanly, or running “docker stop $container; service $container start”. If you run into trouble, the upstart logs are in /var/log/upstart/$container_name.conf.
Docker Run Ubuntu 14
Hopefully this introduction to a media server with Docker containers was thought-provoking; I hope to have further updates down the line for other applications, best practices and how this setup continues to operate in its lifetime.