2014-12-28 14 views
17

Tôi đã tạo vùng chứa postgres bằng hướng dẫn trên fig website. Tôi đã đặt tên cho vùng chứa là db.Làm thế nào để có được vào psql của một container postgres đang chạy?

Vùng chứa đang chạy và ứng dụng của tôi kết nối với nó. Tôi cố gắng để chạy lệnh fig run db psql với db chứa chạy và đã nhận lỗi:

psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

Làm thế nào tôi có thể nhận được vào giao diện psql trong chạy db container?

Trả lời

26

vả sẽ tạo ra một container Docker với một cái tên khác so với cái được sử dụng trong các tập tin fig.yml.

Tôi đã làm việc này bằng cách tìm tên vùng chứa với docker ps và xem cột NAMES.

Sau đó chạy lệnh psql trong container chạy với docker exec -ti NAME_OF_CONTAINER psql -U YOUR_POSTGRES_USERNAME

Lưu ý rằng docker exec chạy lệnh psql trên một container chạy, như trái ngược với docker run đó sẽ bắt đầu một container mới.


Cập nhật

vả bây giờ được gọi docker-compose

+0

Tốt câu trả lời! Việc phân biệt giữa 'docker chạy ' và 'docker exec ' rất quan trọng. Bạn cũng có thể chỉ 'docker exec -it/bin/bash' ** để phát triển **. – schmunk

+0

Cần phải đổ dữ liệu, không thể chạy docker exec -it – rocketspacer

1

Bạn cần phải chạy một container mới để kết nối với một bắt đầu bởi vả. Điều này là như vậy bởi vì các container chính theo mặc định bắt đầu dịch vụ, và nếu bạn làm fig run db psql con số sẽ không bắt đầu dịch vụ nhưng chạy các khách hàng psql thay thế. Xem the Dockerfile.

Vì vậy, để kết nối với dịch vụ PostgreSQL, bạn cần chạy một vùng chứa khác được liên kết với hình bắt đầu bằng hình. Xem https://registry.hub.docker.com/_/postgres/.

Đầu tiên, vì con số thay đổi tên của các vùng chứa đã bắt đầu, hãy kiểm tra cột NAMES của vùng chứa docker ps sau khi đã thực hiện fig up. Sau đó:

docker run -it --link <postgres_container_name>:postgres --rm postgres sh -c 'exec psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres' 

Bạn có thể làm các trick docker exec cũng như desribed bởi @sargas quá, nhưng cách kết nối âm thanh kinh điển hơn với tôi.

+1

Cờ --link là một tính năng cũ không được chấp nhận của Docker: https://docs.docker.com/engine/userguide/networking/default_network/dockerlinks/ –

1

Bạn có thể đăng kết quả của docker ps không? Đoán của tôi là bạn cần phải xác định các cổng container postgres được phơi bày. Chạy docker ps sẽ cho bạn

CONTAINER ID  IMAGE       COMMAND    CREATED    STATUS    PORTS     NAMES 
948b1f6ebc0a  my_postgres:latest   "/usr/lib/postgresql 6 days ago   Up 6 days   0.0.0.0:49155->5432/tcp db 

và tìm kiếm bên dưới cột CẢNG container db của bạn, bạn sẽ thấy cổng db là thực sự tiếp xúc trên. Trong trường hợp này, nó là 49155, nhưng docker sẽ chọn một cổng ngẫu nhiên giữa 49153 và 65535 nếu không được chỉ định rõ ràng khi bắt đầu vùng chứa.Bạn cần phải cung cấp các tùy chọn để -p psql để sau đó nhắm vào cổng mà như vậy

psql -p 49155 ... 

Nguồn: https://docs.docker.com/userguide/dockerlinks/

Các vấn đề liên quan