> [!META]- Inline Metadata
[status:: boat]
[tags:: #state/boat #note/evergreen ]
[up:: [[Docker MOC]] [[AWS MOC]]]
Given a Dockerfile on an EC2 instance that has, at the very least, these commands at the end:
```
EXPOSE 8888
ENTRYPOINT ["/bin/bash"]
```
1. Build the image
```
docker build -t <image name> .
```
2. Run the container
```
docker run -it -p 8888:8888 --ip=0.0.0.0 <image name>
```
If you want to persist data from the host to the container, include [[Using Bind Mounts to Speed Up Docker Development|bind mounts]]:
```
docker run -it -p 8888:8888 -v /abs/path/to/data:/app/data --ip=0.0.0.0 <image name>
```
3. Within the container, run Jupyter Lab (note, specifying the port isn't necessary if you're using the default port 8888):
```
jupyter lab --port=8888 --ip=0.0.0.0 --allow-root
```
# Troubleshooting
If you try to open Jupyter Lab in your browser, and you get a "refused to connect" error, ensure that the SSH config you have for your connection to your EC2 instance (or for SSH in general if you don't have a specific entry for EC2) looks like this:
```
Host <ip block/address>
<any other commands here>
LocalForward 8888 127.0.0.1:8888
```
If you connect via a bastion box, `LocalForward` only needs to be in the entry for the specific instance(s) you're trying to connect to, and not in the entry for the bastion box.
# Source
https://stackoverflow.com/questions/39734097/unable-to-connect-to-jupyter-notebook-served-by-docker