Configure an interpreter using Docker Compose
This is a Professional feature: download PyCharm Professional to try.
Prerequisites
Make sure that the following prerequisites are met:
You have a stable Internet connection.
Ensure that you have a stable Internet connection, so that PyCharm can download and run
busybox:latest
. Once you have successfully configured Docker, you can go offline.Docker is installed. You can install Docker on the various platforms, but here we'll use the Windows installation.
Note that you might want to repeat this tutorial on different platforms; then use Docker installations for macOS and Linux (Ubuntu, other distributions-related instructions are available as well).
Before you start working with Docker, make sure that the Docker plugin is enabled. The plugin is bundled with PyCharm and is activated by default. If the plugin is not activated, enable it on the Plugins page of the IDE settings Ctrl+Alt+S as described in Manage plugins.
If you are using Docker for Windows, enable the Expose daemon on tcp://localhost:2375 without TLS option in the General section of your Docker settings.
Note that you cannot install any Python packages into Docker-based project interpreters.
Preparing an example
We could have actually repeated the same example as was used for Docker, but for Docker Compose it makes no sense - too simple...
To show a realistic example of a Docker Compose application, we'll use a Django application with a PostgreSQL database running in a separate container. Get the project from GitHub, and open it in PyCharm (File | Open).
For this Django application, we should create two containers: one for a database, and one for the application itself. We'll use the Docker Compose to link the two containers together.
Adding files for Docker and Docker Compose
In the Project tool window, right-click the project root and choose New | File Alt+Insert, enter the filename (here Dockerfile) and enter the following code:
FROM python:3.6.7
WORKDIR /app
# By copying over requirements first, we make sure that Docker will cache
# our installed requirements rather than reinstall them on every build
COPY requirements.txt /app/requirements.txt
RUN pip install -r requirements.txt
# Now copy in our code, and run it
COPY . /app
EXPOSE 8000
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
Next, repeat the same steps for the docker-compose.yml file and enter the following code:
version: '2'
services:
web:
build: .
ports:
- "8000:8000"
volumes:
- .:/app
links:
- db
db:
image: "postgres:9.6"
ports:
- "5432:5432"
environment:
POSTGRES_PASSWORD: hunter2
Let's look at the docker-compose.yml file. This file defines 2 services: web
and db
, and links them together.
Configuring Docker
Now that we've prepared our example, let's configure Docker.
To do that, open Settings dialog (Ctrl+Alt+S or click on the main toolbar) and click the Docker page under the Build, Execution, Deployment node. Click
to create a Docker server.
Accept the suggested default values:

For macOS, select Docker for Mac to connect to the Docker daemon.

note
The Path mappings settings are not available on Linux. So, if you want to map some directories on a virtual machine to some path on your local Linux machine, you will have to do it manually.
Next, apply changes.
Configuring Docker Compose as a remote interpreter
Let's now define a remote interpreter based on Docker-Compose.
Ensure that you have downloaded and installed Python on your computer.
Open the Add Python Interpreter dialog by either way:
When you're in the Editor, the most convenient way is to use the Python Interpreter widget in the . Click the widget and select Add Interpreter ...
If you are in the Settings/Preferences dialog Ctrl+Alt+S, select Project <project name> | Python Interpreter. Click the
icon and select Add.
In the dialog that opens, select the Docker Compose option, from the drop-down lists select the Docker server, Docker Compose service (here web
), configuration file (here docker-compose.yml
)and image name (here python
).
Why we've chosen web
? This choice is explained by the fact, that after configuring a Docker-Compose-based interpreter, we'll be able to create regular run configurations that will alter the behavior of the container we selected. Therefore, if we want to debug the code in a container, that's the one we should select here. All other containers in the compose file will always be started together with this one, but you won't be able to affect their behavior from PyCharm - they'll always behave as if you started them with the command docker-compose up
from the command line.
Next, wait while PyCharm starts your Docker-Compose configuration to scan and index:

Using the Docker tool window
Since we've configured Docker, the Services tool window button appears at the bottom of PyCharm's main window. Click this button and see your container running:

Configuring database credentials
Modify the DATABASES
section of the settings.py file in your Django project to add database configuration details:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'postgres',
'USER': 'postgres',
'PASSWORD': 'hunter2',
'HOST': 'db'
}
}
Running your application under Docker-Compose
First, as we are executing a Django application, we must run a migration.
To do that, choose Tools | Run 'manage.py' task and enter migrate
:

(See Run tasks of manage.py for details.)
Next, create an ordinary Django server run/debug configuration. To do that, from the main menu choose Run | Edit Configurations...; in the dialog that opens click and select Django Server:

The only thing you should pay attention to, is that Host field must be set to 0.0.0.0- to make sure that we listen to requests coming from outside the Docker container.
Launch this configuration (Run | Run 'RunDjangoApp'):

To see output in your web browser, go to http://localhost:8000 (in the address bar, change 0.0.0.0 to localhost):

tip
If you are using the Docker Machine, use the machine's IP address instead.
Summary
Let's summarize what has been done with the help of PyCharm:
We downloaded a Django application from GitHub and opened it.
We added specific Docker Compose files to our project.
We configured a remote interpreter based on Docker Compose.
We ran our Django application in the Docker Compose container.