-
Notifications
You must be signed in to change notification settings - Fork 25
Docker Troubleshooting
Here are some common problems we've encountered while setting up the dev environment along with potential solutions. We've ordered this list roughly based on when you might observe the problem in the setup process.
You can always ask questions in Slack #interns. We are here to help!
City ID | Database User |
---|---|
seattle-wa | sidewalk_seattle |
columbus-oh | sidewalk_columbus |
cdmx | sidewalk_cdmx |
spgg | sidewalk_spgg |
pittsburgh-pa | sidewalk_pittsburgh |
newberg-or | sidewalk_newberg |
washington-dc | sidewalk |
chicago-il | sidewalk_chicago |
amsterdam | sidewalk_amsterdam |
la-piedad | sidewalk_la_piedad |
oradell-nj | sidewalk_oradell |
validation-study | sidewalk_validation |
zurich | sidewalk_zurich |
taipei | sidewalk_taipei |
new-taipei-tw | sidewalk_new_taipei |
keelung-tw | sidewalk_keelung |
auckland | sidewalk_auckland |
cuenca | sidewalk_cuenca |
crowdstudy | sidewalk_crowdstudy |
burnaby | sidewalk_burnaby |
teaneck-nj | sidewalk_teaneck |
walla-walla-wa | sidewalk_walla_walla |
st-louis-mo | sidewalk_st_louis |
la-ca | sidewalk_la |
mendota-il | sidewalk_mendota |
If you see an error like:
pg_restore: while PROCESSING TOC:
pg_restore: from TOC entry 9; 2615 2200 SCHEMA public postgres
pg_restore: error: could not execute query: ERROR: schema "public" already exists
Command was: CREATE SCHEMA public;
This is actually the one error that you can simply ignore! :) It doesn't have any effect.
If you see an error like:
Execution exception[[NoSuchElementException: None.get]]
This is most likely because the data from the database is missing and you'd need to import the sql dump. The schema import that's a part of init script only sets the schema and does not import the data.
If you see an error like:
sh: 1: grunt: not found
This is a known problem (#1517). You can fix it by running npm install grunt
from inside the Docker shell.
If you run make import-dump db=sidewalk_seattle
(or similar) and you see errors like this:
could not execute query: ERROR role "sidewalk_seattle" does not exist
could not execute query: ERROR role "saugstad" does not exist
or like this:
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 9; 2615 189957 SCHEMA sidewalk sidewalk_spgg
pg_restore: [archiver (db)] could not execute query: ERROR: role "sidewalk_spgg" does not exist
then run the following line of code for each role that does not exist:
docker exec -it projectsidewalk-db psql -c "CREATE ROLE <missing-role> SUPERUSER LOGIN ENCRYPTED PASSWORD 'sidewalk';" -U postgres -d sidewalk
For example, to add the role saugstad
, you would type:
docker exec -it projectsidewalk-db psql -c "CREATE ROLE saugstad SUPERUSER LOGIN ENCRYPTED PASSWORD 'sidewalk';" -U postgres -d sidewalk
If you see an error like one of these:
sh: 1: /opt/init.sh: not found
sh: 1: /opt/import-users.sh: not found
sh: 1: /opt/import-dump.sh: not found
This is a known problem (#1527). The issue is your files somehow have Windows style line endings, which breaks the shell scripts. If you are on Linux or Windows, you can fix it by running the following lines from outside the Docker shell:
sed -i "s/\r//g" db/init.sh
sed -i "s/\r//g" db/import-users.sh
sed -i "s/\r//g" db/import-dump.sh
If you are on Mac then you will want to run this instead:
ex -bsc '%!awk "{sub(/\r/,\"\")}1"' -cx db/init.sh
ex -bsc '%!awk "{sub(/\r/,\"\")}1"' -cx db/import-users.sh
ex -bsc '%!awk "{sub(/\r/,\"\")}1"' -cx db/import-dump.sh
You will then want to run docker exec -it projectsidewalk-db sh -c "/opt/init.sh"
manually before running your make import-dump
command again.
For Windows: If you continue to get this error, run the following lines outside the Docker shell:
(Get-Content -Raw "db\init.sh").Endswith("`r`n")
(Get-Content -Raw "db\import-users.sh").Endswith("`r`n")
(Get-Content -Raw "db\import-dump.sh").Endswith("`r`n")
Which should all return False
.
If they return False
and you still receive the error, run the following lines:
docker ps -a
docker stop CONTAINER_ID
docker rm CONTAINER_ID
docker images
docker rmi IMAGE_ID (Make sure to do the ID of projectsidewalk/web)
docker rmi IMAGE_ID (Make sure to do the ID of projectsidewalk/db)
And then run the make dev
command again.
If they return 'True' and you still receive the error, then the previous sed
commands did not convert your line endings from Windows style to Unix style, so you should run:
(Get-Content -Raw "db\init.sh").Replace("`r`n","`n") | Set-Content "db\init.sh" -Force -NoNewLine
(Get-Content -Raw "db\import-dump.sh").Replace("`r`n","`n") | Set-Content "db\import-users.sh" -Force -NoNewLine
(Get-Content -Raw "db\import-dump.sh").Replace("`r`n","`n") | Set-Content "db\import-dump.sh" -Force -NoNewLine
Which should fix the line endings in the case that the sed
commands did not. Now run:
(Get-Content -Raw "db\init.sh").Endswith("`r`n")
(Get-Content -Raw "db\import-users.sh").Endswith("`r`n")
(Get-Content -Raw "db\import-dump.sh").Endswith("`r`n")
And make sure these are all False and continue as described above.
If you execute npm start
but run into this error:
[info] play - Application started (Dev)
[error] application -
! @7h87h0af1 - Internal server error, for (GET) [/] ->
play.api.Application$$anon$1: Execution exception[[FileNotFoundException: google_maps_api_key.txt (No such file or directory)]]
at play.api.Application$class.handleError(Application.scala:296) ~[play_2.10-2.3.8.jar:2.3.8]
at play.api.DefaultApplication.handleError(Application.scala:402) [play_2.10-2.3.8.jar:2.3.8]
...
Make sure you put the Google Maps API key (received from Mikey) into the root directory of your project with the file named exactly google_maps_api_key.txt
.
If it seems like commands that you run using make
are just not working, first try reinstalling make
. If the issue persists, one workaround has been to look at the Makefile
and manually run each command that make
is an alias for whenever you need to run something. For example, if you wanted to run make ssh target=web
, you would instead run docker exec -it projectsidewalk-web /bin/bash
(you can see where the comes from by looking at the Makefile
).
If you are having trouble connecting to the database, one potential issue might be that your docker container for the database might not have the configs set correctly for listening addresses. ssh
into the db container and edit the /var/lib/postgresql/data/postgresql.conf
file, setting listen_addresses = '*'
.
If you see an error like this on Windows:
gpg: keyserver receive failed: Server indicated a failure
your system is treating this warning as a fatal error and is not completing the build. To fix this, add this line to the Dockerfile at line 2:
ENV APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1
After restarting laptop, you run > make dev
but receive an error like this:
> make dev
projectsidewalk-db is up-to-date
Starting projectsidewalk-db ... done
ERROR: Cannot create container for service web: Conflict. The container name "/projectsidewalk-web" is already in use by container "abeedfd010f3bbf9e03d9725b69ab9560b796e9b7e48bef8ff656243fb40a494". You have to remove (or rename) that container to be able to reuse that name.
make: *** [docker-run] Error 1
What probably happened is that your computer was not shut down correctly, so the web
container was not closed correctly. To fix, you can just remove that docker container: docker container rm /projectsidewalk-web
.
If you are using WSL with Windows, trying running wsl --shutdown
in the command prompt. Docker should ask if you want to restart WSL. Click restart. Otherwise, just restart Docker manually and connect again to the WSL Distribution.
If you encounter an error with the Docker-Compose
command on Mac, you may need to recreate the symlink.
- Review the documentation - (https://docs.docker.com/compose/install/) - in the installation scenarios to create a new symlink.
- Recreate the symlink using the following commands found in the documentation:
Note: This is a temporary solution.
sudo rm /usr/local/bin/docker-compose` sudo ln -s /Applications/Docker.app/Contents/Resources/cli-plugins/docker-compose /usr/local/bin/docker-compose`