Stephen Finucane <step...@that.guru> writes: > Ubuntu 18.04 (Bionic Beaver) providers 'docker-compose' 1.17.1 [1] at > release which supports the 3.0 syntax [2]. Using this allows some users > (me) to resolve a long standing issue caused by a UID that's not 1000. > > [1] https://packages.ubuntu.com/bionic/docker-compose > [2] https://docs.docker.com/compose/compose-file/ > --- > .gitignore | 3 ++ > docker-compose-pg.yml | 60 > ++++++++++++++++++++------------------- > docker-compose.yml | 56 ++++++++++++++++++------------------ > docs/development/installation.rst | 48 +++++++++++++------------------ > tools/docker/Dockerfile | 5 +++- > 5 files changed, 86 insertions(+), 86 deletions(-) > > diff --git a/.gitignore b/.gitignore > index 04b66702..f37caccf 100644 > --- a/.gitignore > +++ b/.gitignore > @@ -52,3 +52,6 @@ htmlcov/ > > # Patchwork configuration files > patchwork/settings/production.py > + > +# docker-compose configuration files > +/.env > diff --git a/docker-compose-pg.yml b/docker-compose-pg.yml > index 81dde3e5..e403547c 100644 > --- a/docker-compose-pg.yml > +++ b/docker-compose-pg.yml > @@ -1,30 +1,32 @@ > -# the version of docker-compose shipped in ubuntu 16.04 is > -# 1.5.2, which doesn't support version 2 syntax. Yay! > -# also, v1 doesn't support explicit build args, so if you're not > -# uid 1000, you will either need to manually hack the Dockerfile > -# or upgrade to v2 and use the build-arg to override it. > +version: "3" > +services: > + db: > + image: postgres:9.6 > + volumes: > + - ./tools/docker/db/postdata:/var/lib/postgresql/data > + environment: > + - POSTGRES_PASSWORD=password
Somehow this seems to be breaking auth: db_1 | FATAL: password authentication failed for user "postgres" db_1 | DETAIL: Password does not match for user "postgres". db_1 | Connection matched pg_hba.conf line 95: "host all all all md5" Does this occur for you? Any thoughts on what might have changed? Regards, Daniel > > -db: > - image: postgres:9.6 > - environment: > - - POSTGRES_PASSWORD=password > - volumes: > - - ./tools/docker/db/postdata:/var/lib/postgresql/data > - > -web: > - build: . > - dockerfile: ./tools/docker/Dockerfile > - command: python3 manage.py runserver 0.0.0.0:8000 > - volumes: > - - .:/home/patchwork/patchwork/ > - ports: > - - "8000:8000" > - links: > - - db > - environment: > - - PGPASSWORD=password > - - PW_TEST_DB_HOST=db > - - PW_TEST_DB_PORT=5432 > - - PW_TEST_DB_TYPE=postgres > - - PW_TEST_DB_USER=postgres > - - PW_TEST_DB_PASS=password > + web: > + build: > + context: . > + dockerfile: ./tools/docker/Dockerfile > + args: > + - UID > + command: python3 manage.py runserver 0.0.0.0:8000 > + volumes: > + - .:/home/patchwork/patchwork/ > + ports: > + - "8000:8000" > + # TODO(stephenfin): links are deprecated and should be replaced > + # with user-defined networks > + links: > + - db > + environment: > + - UID > + - PGPASSWORD=password > + - PW_TEST_DB_HOST=db > + - PW_TEST_DB_PORT=5432 > + - PW_TEST_DB_TYPE=postgres > + - PW_TEST_DB_USER=postgres > + - PW_TEST_DB_PASS=password > diff --git a/docker-compose.yml b/docker-compose.yml > index 47786eca..18d60b7b 100644 > --- a/docker-compose.yml > +++ b/docker-compose.yml > @@ -1,28 +1,30 @@ > -# the version of docker-compose shipped in ubuntu 16.04 is > -# 1.5.2, which doesn't support version 2 syntax. Yay! > -# also, v1 doesn't support explicit build args, so if you're not > -# uid 1000, you will either need to manually hack the Dockerfile > -# or upgrade to v2 and use the build-arg to override it. > +version: "3" > +services: > + db: > + image: mysql:5.7 > + volumes: > + - ./tools/docker/db/data:/var/lib/mysql > + environment: > + - MYSQL_ROOT_PASSWORD=password > + - MYSQL_USER=patchwork > + - MYSQL_PASSWORD=password > > -db: > - image: mysql:5.7 > - volumes: > - - ./tools/docker/db/data:/var/lib/mysql > - environment: > - - MYSQL_ROOT_PASSWORD=password > - - MYSQL_USER=patchwork > - - MYSQL_PASSWORD=password > - > -web: > - build: . > - dockerfile: ./tools/docker/Dockerfile > - command: python3 manage.py runserver 0.0.0.0:8000 > - volumes: > - - .:/home/patchwork/patchwork/ > - ports: > - - "8000:8000" > - links: > - - db > - environment: > - - PW_TEST_DB_HOST=db > - - PW_TEST_DB_PORT=3306 > + web: > + build: > + context: . > + dockerfile: ./tools/docker/Dockerfile > + args: > + - UID > + command: python3 manage.py runserver 0.0.0.0:8000 > + volumes: > + - .:/home/patchwork/patchwork/ > + ports: > + - "8000:8000" > + # TODO(stephenfin): links are deprecated and should be replaced > + # with user-defined networks > + links: > + - db > + environment: > + - UID > + - PW_TEST_DB_HOST=db > + - PW_TEST_DB_PORT=3306 > diff --git a/docs/development/installation.rst > b/docs/development/installation.rst > index f2ed0f2d..f857ff6f 100644 > --- a/docs/development/installation.rst > +++ b/docs/development/installation.rst > @@ -19,15 +19,22 @@ Patchwork provides a Docker-based environment for quick > configuration of a > development environment. This is the preferred installation method. To > configure Patchwork using Docker: > > -1. Install `docker`_ and `docker-compose`_. > +#. Install `docker`_ and `docker-compose`_. > > -2. Build the images. This will download over 200MB from the internet: > +#. Create a ``.env`` file in the root directory of the project and store your > + ``UID`` attribute there. > + > + .. code-block:: shell > + > + $ echo "UID=$UID" > .env > + > +#. Build the images. This will download over 200MB from the internet: > > .. code-block:: shell > > $ docker-compose build > > -3. Run `docker-compose up`: > +#. Run ``docker-compose up``: > > .. code-block:: shell > > @@ -118,38 +125,18 @@ For more information on Docker itself, please refer to > the `docker`_ and > > If you see an error like the below:: > > - py.error.EACCES: [Permission denied]: > open('/home/patchwork/patchwork/.tox/py27-django18/.tox-config1', 'w') > - > - your host user account is likely using a different UID to the one > hardcoded > - in the Dockerfile. You can confirm this like so: > + You must define UID in .env > > - .. code-block:: shell > - > - $ echo $UID > - 1234 > - > - If this is anything other than `1000`, you must must modify the > `Dockerfile` > - found in `tools/docker` to use your UID and then rebuild: > - > - .. code-block:: shell > + Ensure you have created a ``.env`` file in the root of your project > + directory and stored the ``UID`` attribute there. For more information on > + why this is necessary, refer to this `docker-compose issue`__. > > - $ sed -i "/ARG UID=/c\ARG UID=$(echo $UID)" tools/docker/Dockerfile > - $ docker-compose build web > - > - This change must be retained in the event that you rebuild the container. > - You can "hide" the change from Git like so: > - > - .. code-block:: shell > - > - $ git update-index --assume-unchanged tools/docker/Dockerfile > - $ git update-index --skip-worktree tools/docker/Dockerfile > - > - This should be resolved in a future release when we support docker-compose > - 2.1 syntax in `docker-compose.yml`. > + __ https://github.com/docker/compose/issues/2380 > > .. _docker: https://docs.docker.com/compose/install/ > .. _docker-compose: https://docs.docker.com/engine/installation/linux/ > > + > Manual Installation > ------------------- > > @@ -375,6 +362,7 @@ using the aptly-named `createsuperuser` command: > > (.venv)$ ./manage.py createsuperuser > > + > Import Mailing List Archives > ---------------------------- > > @@ -429,6 +417,7 @@ script again. > > __ http://blog.behnel.de/posts/indexp118.html > > + > Django Debug Toolbar > -------------------- > > @@ -437,6 +426,7 @@ by default this is only displayed if you are developing > on localhost. If > developing on a different machine, you should configure an SSH tunnel such > that, for example, `localhost:8000` points to `[DEV_MACHINE_IP]:8000`. > > + > .. _dev-envvar: > > Environment Variables > diff --git a/tools/docker/Dockerfile b/tools/docker/Dockerfile > index 109410bb..e25c381c 100644 > --- a/tools/docker/Dockerfile > +++ b/tools/docker/Dockerfile > @@ -1,8 +1,11 @@ > FROM ubuntu:17.10 > > -ARG UID=1000 > +ARG UID > ARG TZ="Australia/Canberra" > > +RUN echo $UID > +RUN [ -n "$UID" ] || { echo "You must define UID in .env" 1>&2; exit 1; } > + > ENV PROJECT_HOME /home/patchwork/patchwork > > ENV db_user root > -- > 2.14.3 > > _______________________________________________ > Patchwork mailing list > Patchwork@lists.ozlabs.org > https://lists.ozlabs.org/listinfo/patchwork _______________________________________________ Patchwork mailing list Patchwork@lists.ozlabs.org https://lists.ozlabs.org/listinfo/patchwork