- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有一个similar thread有同样的问题,但无法为我工作。基本上,我正在尝试使用 testing.postgresql
对 myproject
进行单元测试,并在 docker 容器中运行它。
但是,当我运行我的命令时,我得到一个RuntimeError: command not found: initdb
,
docker-compose exec myproject python3 -m unittest
这在 WSL 中有效,但在 docker 中无效。
看起来它无法找到 initdb。它与在 docker-compose.yml 中创建的数据库有冲突问题还是我在 docker 文件中遗漏了一些行?
我从 docs 中概述了我的测试示例:
class TestPostgresqlInteraction(unittest.TestCase):
Postgresql = testing.postgresql.PostgresqlFactory(cache_initialized_db=True)
with testing.postgresql.Postgresql() as postgresql:
engine = create_engine(postgresql.url())
dbConn = psycopg2.connect(**postgresql.dsn())
cursor = dbConn.cursor()
def setUp(self):
self.postgresql = self.Postgresql()
def tearDown(self):
self.postgresql.stop()
def testMethod(self)
conn = psycopg2.connect(**self.postgresql.dsn())
cursor = conn.cursor()
# execute cursor and do tests...
def tearDownModule(self):
self.Postgresql.clear_cache()
docker-compose.yml
version: "3"
services:
myproject:
build:
context: .
dockerfile: ./myproject/Dockerfile
depends_on:
- database
volumes:
- ./myproject:/code
stdin_open: true
tty: true
database:
build:
context: .
dockerfile: ./database/Dockerfile
environment:
POSTGRES_USER_FILE: /secrets/dbUser.txt
POSTGRES_PASSWORD_FILE: /secrets/dbPassword.txt
ports:
- "8765:5432"
volumes:
- otherdata:/var/lib/postgresql/data
我的项目/Dockerfile
FROM python:3.7.3-stretch
RUN apt-get update && apt-get install -y \
poppler-utils
ARG moduleDir=myproject
WORKDIR /code
COPY secrets/ /secrets
# COPY $moduleDir/myproject/ ./
COPY $moduleDir/requirements.txt requirements.txt
RUN pip install -r requirements.txt
数据库/Dockerfile
FROM postgres:11.3
WORKDIR /secrets
COPY secrets/dbUser.txt dbUser.txt
COPY secrets/dbPassword.txt dbPassword.txt
RUN mkdir -p /docker-entrypoint-initdb.d
COPY database/schema.sql /docker-entrypoint-initdb.d
回溯:
ImportError: Failed to import test module: tests.testMyproject
File "/usr/local/lib/python3.7/unittest/loader.py", line 436, in _find_test_path
module = self._get_module_from_name(name)
File "/usr/local/lib/python3.7/unittest/loader.py", line 377, in _get_module_from_name
__import__(name)
File "/code/tests/testmyProject.py", line 40, in <module>
class TestPostgresqlInteraction(unittest.TestCase):
File "/code/tests/testmyProject.py", line 46, in TestPostgresqlInteraction
Postgresql = testing.postgresql.PostgresqlFactory(cache_initialized_db=True)
File "/usr/local/lib/python3.7/site-packages/testing/common/database.py", line 52, in __init__
self.cache = self.target_class(**settings_noautostart)
File "/usr/local/lib/python3.7/site-packages/testing/common/database.py", line 92, in __init__
self.initialize()
File "/usr/local/lib/python3.7/site-packages/testing/postgresql.py", line 50, in initialize
self.initdb = find_program('initdb', ['bin'])
File "/usr/local/lib/python3.7/site-packages/testing/postgresql.py", line 144, in find_program
raise RuntimeError("command not found: %s" % name)
RuntimeError: command not found: initdb
最佳答案
您的 Docker 容器可能缺少 which
shell 命令。
testing.postgresql
调用 testing.common.database.get_path_of
,然后执行 which
命令定位 initdb
程序:
def get_path_of(name):
if os.name == 'nt':
which = 'where'
else:
which = 'which'
try:
path = subprocess.Popen([which, name],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE).communicate()[0]
if path:
return path.rstrip().decode('utf-8')
else:
return None
except Exception:
return None
如果缺少 which
,您可以使用包管理器添加它。这适用于我基于 CentOS 的容器:
yum 安装哪个
关于python - 在 testing.postgresql 中,在 Docker 中找不到 initdb 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58070698/
我正在 Circleci 上使用 docker-compose 来启动一个 postgres 容器,其中包含一堆安装在 /docker-entrypoint-initdb.d/ 上的 sql 文件。
我之前使用安装程序安装了 alfresco 社区版,但我的服务器最终用完了硬盘空间,一切都崩溃了。我无法运行卸载程序(出现奇怪的权限问题)。 所以我删除了整个安装文件夹并尝试重新安装。当我以 root
我是 Airflow 新手。我按照此处提供的说明进行操作:https://www.youtube.com/watch?v=SYOUbiGtGiU&t=49s 第 1 步:控制面板 |程序和功能 |打开
我刚开始使用 Airflow ,我使用了命令:airflow initdb根据需要启动 Airflow 数据库。 但我偶然发现了错误:import cattr File "/home/adrienb/
根据https://hub.docker.com/_/postgres的“初始化脚本”部分,我在docker-entrypoint-initdb.d中有两个文件: init-db.sh backup.
我正在尝试初始化我的docker arangodb,但一直出现连接错误:我尝试将服务器端点更改为http + tcp:// .....,但错误仍然存在,这可能是怎么回事? docker-compo
我已在基于 oraclelinux:7.1 镜像(Docker 版本 1.12.5)的 docker 容器中安装了 Oracle 12c。不过有一个小问题。运行容器时,目录/docker-entryp
我有一个本地Openshift实例,在该实例中,我尝试使用helm安装Sentry: helm install --name sentry --wait stable/sentry。 除了Postgr
我在 postgres 后端遇到 Airflow 初始化问题 Ubuntu:18.04.1 Airflow :v1.10.6 Postgres:10.10 Python 3.6 当我运行时 airfl
每当我尝试运行下面的命令时,它在 RHEL7 上总是失败。我试过另一个类似的操作系统(较新),但它不这样做,只是工作。 我查看了目录的权限,禁用了 selinux(以防万一),还查看了区域设置,但是这
如何使用 initdb 为 PostgreSQL 创建临时数据库?另外,如何使用虚拟数据填充它以及如何在使用后删除它? 我有一个完整的数据库模式。我不想一张一张地创建临时表。使用 initdb,我希望
我已经使用 EnterpriseDB 安装安装了 PostgreSQL。 我运行了 sudo ./postgresql-9.3.5-3-osx.app/Contents/MacOS/installbu
我正致力于在 Linux 系统(CentOS - RedHat - Fedora)上的 PostgreSQL 9.x 中创建一个数据库集群(单一数据库)。我已经安装了正确的 PostgreSQL 包(
我正在使用 mysql docker 容器并将初始化脚本添加到 docker-entrypoint-initdb.d 中,如下所述:https://hub.docker.com/_/mysql/ (初
我在 docker-compose.yml 中使用两个服务对一个应用程序进行 docker 化:一个是从 php:7.3.28-apache 构建的网络图像,另一个是从 postgres:11.12-
我关注 http://book.cakephp.org/2.0/en/tutorials-and-examples/simple-acl-controlled-application/part-two
我在名为 engdados 的 Anaconda 环境之一中安装了 Airflow 。当我执行命令 Airflow initdb 时,我收到以下错误:airflow initdb: cannot im
“airflow initdb”命令和“airflow resetdb”命令之间究竟有什么区别? 真的有必要有 2 个不同的命令吗? 什么时候使用一种和另一种比较合适? doc说... airflow
我按照文档安装了 Apache-airflow。 https://airflow.apache.org/docs/stable/start.html 当我执行airflow initdb时,每次都会出
生成mariadb图像时,我想执行脚本以及初始化数据库模式。 我将这些文件放在/docker-entrypoint-initdb.d下 模式初始化按预期工作 Shell脚本包含apt-get inst
我是一名优秀的程序员,十分优秀!