Docker

Learn how to install Mycroft for Docker either from a Docker Hub install, or by building the image. Many thanks to Brian Hopkins (@btotharye) for this documentation.

Mycroft is available for Docker. You have two options for a Docker installation:

  • Build Image from source

  • Pull Image from Docker Hub

Prerequisites

This documentation assumes the following:

  • You have already installed Docker on your machine based on the operating system you are running.

Getting Started

Installing from Docker Hub

The Mycroft for Docker image is updated on dockerhub and you can install it by running the command below:

docker pull mycroftai/docker-mycroft

Then follow the instuctions below for running Mycroft for Docker.

Installing via building the Docker image

it pull this repository.

git clone https://github.com/MycroftAI/docker-mycroft.git

Build the Docker image in the directory that you have checked out.

docker build -t mycroft .

Follow the instructions for running Mycroft for Docker below to continue.

Running Mycroft for Docker

To prevent having to register your instance with home.mycroft.ai every time the container is started, and to have persistent data, you can map a local directory into the container. Just replace the directory_on_local_machine with the path you want the container mapped to on your local machine (eg. /home/user/mycroft).

Sounds can be played in the Docker container using pulseaudio, without modifying any config files

Run the following to start up Mycroft for Docker:

_NOTE: You don't need the -e PULSE_SERVER or any of the other pulse related variables if you only want to use text via a websocket to mycroft for example using this container.

docker run -d
-v directory_on_local_machine:/root/.mycroft
--device /dev/snd
-e PULSE_SERVER=unix:${XDG_RUNTIME_DIR}/pulse/native
-v ${XDG_RUNTIME_DIR}/pulse/native:${XDG_RUNTIME_DIR}/pulse/native
-v ~/.config/pulse/cookie:/root/.config/pulse/cookie
-p 8181:8181
--name mycroft mycroftai/docker-mycroft

Confirm via docker ps that your container is up and serving port 8181:

docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
692219e23bf2 mycroft "/mycroft/ai/mycro..." 3 seconds ago Up 1 second 0.0.0.0:8181->8181/tcp mycroft

You should now have a running instance of Mycroft for Docker that you can interact with via the command line.

Pairing Mycroft for Docker

After the container has been started you can watch the logs and look for the line that says "Pairing Code" and use this to pair at https://home.mycroft.ai.

You can view the logs with:

docker logs -f mycroft

Interacting With Mycroft on Docker

Accessing Mycroft Logs

At any time you can watch the logs simply by running the bellow command:

docker logs -f mycroft

You can exit out of this docker log command by hitting Ctrl + C. The --follow turns it into a real tail instead of a cat of the log.

CLI Access

You can interact with the CLI of the container by running the following command, this will connect you to the running container via bash:

docker exec -it mycroft /bin/bash

Accessing Mycroft CLI

You can interact with the CLI of the container by running the following command. This will connect you to the running container via bash:

docker exec -it mycroft /bin/bash

Once in the container you can do ./start-mycroft.sh cli to get a interactive CLI to interact with Mycroft for Docker if needed.

You can type Ctrl + C to exit the cli.

Installing Skills on Docker Mycroft

You can install Skills into the container by running the following:

docker exec -it mycroft /opt/mycroft/msm/msm install github_url

So to install the Basic Helper Skill:

docker exec -it mycroft /opt/mycroft/msm/msm install https://github.com/btotharye/mycroft-skill-basichelp

Removing Skills on Docker Mycroft

You can uninstall a Skill by removing the folder location for it.

docker exec -it mycroft rm -rf /opt/mycroft/skills/mycroft-skill-basichelp

This would remove the above Basic Helper Skill.

Getting help

Mycroft for Docker is community-supported. You are welcome to join the Mycroft Chat Docker channel.