一个 docker 容器中有 2 个进程,一个 Firebird 数据库服务器和一个带有 SQLAlchemy 的脚本。是否可以通过脚本连接到数据库服务器,如果可能,如何连接?可以从主机连接到服务器,端口被转发。码头文件:
FROM jacobalberty/firebird
RUN apt-get -yqq update && apt-get -yqq upgrade
RUN apt-get install -y --no-install-recommends python3-pip
RUN apt-get install python3-dev -y --no-install-recommends
RUN apt-get install -y --no-install-recommends python3-virtualenv
RUN apt-get -y install locales
RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \
locale-gen
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
RUN adduser electron_queue
WORKDIR /home/electron_queue
COPY requirements.txt requirements.txt
RUN /usr/bin/easy_install-3.4 virtualenv
RUN virtualenv --python=/usr/bin/python3.4 venv
RUN venv/bin/pip3 install -r requirements.txt
RUN venv/bin/pip3 install gunicorn
COPY app app
COPY main.py config.py boot.sh ./
COPY visit_db1.fdb /firebird/data/
RUN chmod +x boot.sh
ENV FLASK_APP main.py
ENV DATABASE_URL firebird+fdb://db_login:db_password@localhost:3050//firebird/data/db.fdb
ENV ISC_PASSWORD 'password'
#RUN chown -R electron_queue:electron_queue ./
#USER electron_queue
EXPOSE 5000
#EXPOSE 3050/tcp
ENTRYPOINT ["./boot.sh"]
# умолчание, для команды которая должна выполняться при запуске контейнера
#ENTRYPOINT ["/usr/local/firebird/docker-entrypoint.sh"]
我试过了:
- 将本地主机更改为 127.0.0.1
- 将 localhost 更改为 host.docker.internal
- 将 localhost 更改为 host 并将 --net="host" 传递给 docker run
- 创建 docker-net,传入 --net 参数
- 创建 docker-net,将其传入 --net 参数并重复步骤 1、2 我的错误文本(相同)
sqlalchemy.exc.DatabaseError: (fdb.fbcore.DatabaseError) ('Error while connecting to database:\n- SQLCODE: -902\n- Unable to complete network request to host "localhost".\n- Failed to establish a connection.', -902, 335544721)
我还尝试取消注释 USER electron_queue、EXPOSE 3050/tcp 和 firebird 的入口点。
问题是 Firebird 服务器没有运行。要运行它,您需要从 jacobalberty/firebird 映像的 ENTRYPOINT 运行命令