Closed CitationGraham closed 7 months ago
@CitationGraham that is by design. This is how database initialization works.
@LaurentGoderre I am not sure the inability to override the username or at least the password after first running makes any sense in a Docker context...
You can hack around with the ENTRYPOINT to accomplish the same outcome; the expectation is to be able to do it more simply and cleanly with the same ENV used earlier in the process.
did you tried doing that without the volume?
See also https://hub.docker.com/_/postgres, especially:
Warning: the Docker specific variables will only have an effect if you start the container with a data directory that is empty; any pre-existing database will be left untouched on container startup.
I agree that not being able to reconfigure is a bit unusual, but a database without persistence is even more unusual and users/authentication are a property of the initialized database (and maintained via the data directory/database itself after initialization). :smile:
@tianon the specific use case for this, is baking data into a testing database that can be shipped as an image for parallel test runs.
Currently we face a choice between really really slow startup (copying into /docker-entrypoint-initdb.d
at build then loading at run) or loading at build-time and having essentially broken authentication.
The three other database products we use all allow overriding credentials at runtime.
@CitationGraham creating another user wouldn't work in your use case?
I run the command:
And I can log into the database with the username
first
and the passwordfirst
:I then stop that container and run the following command in the same directory:
And I cannot log in as second!! (I can still log in as first)