postgresql - postgres docker以代码1退出并且exec用户进程导致“没有这样的文件或目录”
问题描述
我正在尝试在我的应用程序旁边启动一个 postgres db 的 docker img。
我想知道这是否是因为我在 Windows 10 上运行 docker 而与 linux 兼容?
当我运行命令时: docker-compose -f docker-compose-dev.yml up --build 我一直到底部并失败:
Starting testdriven-app_users-db_1 ... done
Recreating testdriven-app_users_1 ... done
Attaching to testdriven-app_users-db_1, testdriven-app_users_1 users-db_1 | 2018-11-06 01:39:05.178 UTC [1] LOG: listening on IPv4 address"0.0.0.0", port 5432
users-db_1 | 2018-11-06 01:39:05.178 UTC [1] LOG: listening on IPv6 address "::", port 5432
users-db_1 | 2018-11-06 01:39:05.198 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
users-db_1 | 2018-11-06 01:39:05.212 UTC [20] LOG: database system was shut down at 2018-11-06 01:37:48 UTC
users-db_1 | 2018-11-06 01:39:05.216 UTC [1] LOG: database system is ready to accept connections
users_1 | standard_init_linux.go:190: exec user process caused "no such file or directory"
testdriven-app_users_1 exited with code 1
这是我的 yml 文件:
version: "3.6"
services:
users:
build:
context: ./services/users
dockerfile: Dockerfile-dev
volumes:
- "./services/users:/usr/src/app"
ports:
- 5001:5000
environment:
- FLASK_APP=project/__init__.py
- FLASK_ENV=development
- APP_SETTINGS=project.config.DevelopmentConfig
- DATABASE_URL=postgres://postgres:postgres@users-db:5432/users_dev
- DATABASE_TEST=postgres://postgres:postgres@users-db:5432/users_test
depends_on:
- users-db
users-db:
build:
context: ./services/users/project/db
dockerfile: Dockerfile
ports:
- 5432:5432
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
和我的码头文件:
FROM python:3.6.5-alpine
RUN apk update && \
apk add --virtual build-deps gcc python-dev musl-dev && \
apk add postgresql-dev && \
apk add netcat-openbsd
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY ./requirements.txt /usr/src/app/requirements.txt
RUN pip install -r requirements.txt
COPY ./entrypoint.sh /usr/src/app/entrypoint.sh
RUN chmod +x /usr/src/app/entrypoint.sh
COPY . /usr/src/app
CMD ["/usr/src/app/entrypoint.sh"]
以及随后的 entrypoint.sh:
#!/bin/sh
echo "Waiting for postgres..."
while ! nc -z users-db 5432; do
sleep 0.1
done
echo "PostgresSQL started"
python manage.py run --host 0.0.0.0
解决方案
对我来说,解决方案是 dos 行尾字符与 linux 不同。我的 docker 容器是一个 linux 发行版,但 Visual Studio 代码在 Windows 上运行。如果您转到右下角,您可以更改特定文件的 EOL。我去了entrypoint.sh并将其从crlf更改为lf
推荐阅读
- tcl - 在 Tcl 中使用字符串递增数组时如何修复预期的整数错误
- sql - 如何在 SQL Server 中获取具有相同产品和品牌的所有包?
- php - 针对特定用户禁用 WooCommerce 特定产品
- c - 为什么 C 标准不公开获取 malloc 块大小的函数?
- html - 如何将链接添加到 CSS 选择字段?
- python - 如何使用硒(Python)从 SELECT 中选择一个选项?
- flask-mongoengine - 如何使用 flask-mongoengine 连接 cosmosDB
- pytorch - 简单的卷积网络
- javascript - 如何从适用于每个选择的多项选择中获取值?
- javascript - 为什么嵌套的 postMessage 会导致 rAF 在 setTimeout 之前被触发?