Làm thế nào để truyền đối số cho điểm vào trong docker-compose.yml


158

Tôi sử dụng hình ảnh này: dperson / samba

Hình ảnh đang xác định điểm vào riêng của nó và tôi không muốn ghi đè lên nó.

Tôi cần chuyển các đối số đến điểm vào, chỉ với docker:

docker run ... dperson/samba arg1 arg2 arg3

Nhưng làm thế nào để làm điều đó với docker_compose.yml?

Ngay bây giờ tôi sử dụng như một cách giải quyết:

command: samba.sh arg1 arg2 arg3

Nhưng nó không thỏa mãn khi tôi buộc xác định lại điểm vào.

Câu trả lời:


127

Điều commandkhoản này hoạt động như @Karthik nói ở trên.

Một ví dụ đơn giản, dịch vụ sau sẽ -inMemoryđược thêm vào ENTRYPOINTkhi nó docker-compose upđược chạy.

version: '2'
services:
  local-dynamo:
    build: local-dynamo
    image: spud/dynamo
    command: -inMemory

52

Bất cứ điều gì được chỉ định trong docker-compose.yml commandsẽ được thêm vào entrypointđịnh nghĩa trong Dockerfile, được cung cấp entrypointđược xác định trong biểu mẫu thực thi trong Dockerfile.

Nếu Entrypoint được xác định ở dạng shell, thì mọi đối số CMD sẽ bị bỏ qua.


20
Làm thế nào về một số ví dụ. "Mẫu thực thi" là gì?
Aaron McMillin

13
ENTRYPOINT ["executable", "param1", "param2"](mẫu thực thi, ưu tiên) ENTRYPOINT command param1 param2(mẫu shell) Tham khảo: Tham chiếu Dockerfile
jonasbn

16
Một ví dụ sẽ giúp câu trả lời này rất nhiều.
Dagroom

32

Bạn có thể sử dụng docker-compose runthay vì docker-compose upvà giải quyết các đối số ở cuối. Ví dụ:

docker-compose run dperson/samba arg1 arg2 arg3

Nếu bạn cần kết nối với các container docker khác, sử dụng có thể sử dụng --service-portstùy chọn:

docker-compose run --service-ports dperson/samba arg1 arg2 arg3

1
thật đáng buồn trong bầy đàn này không phải là một lựa chọn
holms

15

Để ghi đè điểm nhập mặc định, sử dụng entrypointtùy chọn . Để vượt qua các đối số sử dụng command.

Dưới đây là ví dụ về việc thay thế bashbằng shtrong ubuntuhình ảnh:

version: '3'
services:
  sh:
    entrypoint: /bin/sh
    command: -c "ps $$(echo $$$$)"
    image: ubuntu
    tty: true
  bash:
    entrypoint: /bin/bash
    command: -c "ps $$(echo $$$$)"
    image: ubuntu
    tty: true

Đây là đầu ra:

$ docker-compose up   
Starting test_sh_1                ... done
Starting 020211508a29_test_bash_1 ... done
Attaching to test_sh_1, 020211508a29_test_bash_1
sh_1    |   PID TTY      STAT   TIME COMMAND
sh_1    |     1 pts/0    Ss+    0:00 /bin/sh -c ps $(echo $$)
020211508a29_test_bash_1 |   PID TTY      STAT   TIME COMMAND
020211508a29_test_bash_1 |     1 pts/0    Rs+    0:00 ps 1

13

Tôi đã phải đối mặt với cùng một vấn đề với nô lệ jenkins ssh ' jenkinsci / ssh-nô lệ '. Tuy nhiên, trường hợp của tôi hơi phức tạp vì cần phải truyền một đối số có khoảng trắng. Tôi đã quản lý để làm điều đó như dưới đây (điểm vào trong dockerfile ở dạng exec):

command: ["some argument with space which should be treated as one"]
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.