将FTP容器连接到docker-compose而不是docker run

时间:2019-01-23 09:51:04

标签: docker docker-compose

我需要从my_go_app容器连接FTP服务器。 当我从docker compose上执行此操作时,可以使用以下命令进行操作:

apk add lftp
lftp -d ftp://julien:test@ftpd-server

连接良好

但是当我尝试通过docker run运行容器时,我无法再连接到FTP服务器

这是我使用的命令:

docker run --name my_go_app --rm -v volume:/go my_go_app:exp --network=my_go_app_network --env-file ./test.env

这是正在工作的docker-compose.yml

version: '3'

services:
  my_go_app:
    image: my_go_app:exp
    volumes:
      - ./volume:/go
    networks:
      my_go_app_network:
    env_file:
      - test.env

  ftpd-server:
    container_name: ftpd-server
    image: stilliard/pure-ftpd:hardened
    ports:
      - "21:21"
      - "30000-30009:30000-30000"
    environment:
      PUBLICHOST: "0.0.0.0"
      FTP_USER_NAME: "julien"
      FTP_USER_PASS: "test"
      FTP_USER_HOME: "/home/www/julien"
    restart: on-failure
    networks:
      my_go_app_network:

networks:
  my_go_app_network:
    external: true

编辑:

我将网络添加为外部网络,并使用以下命令手动创建了该网络:

 docker network create my_go_app_network

现在看来,my_go_app是默认网络的一部分:

my_go_app git:(tests) ✗ docker inspect my_go_app -f "{{json .NetworkSettings.Networks }}"         
{"bridge":{"IPAMConfig":null,"Links":null,"Aliases":null,"NetworkID":"62b2dff15ff00d5cd56c966cc562b8013d06f18750e3986db530fbb4dc4cfba7","EndpointID":"6d0a81a83cdf639ff13635f0a38eeb962075cd729181b7c60fadd43446e13607","Gateway":"172.17.0.1","IPAddress":"172.17.0.2","IPPrefixLen":16,"IPv6Gateway":"","GlobalIPv6Address":"","GlobalIPv6PrefixLen":0,"MacAddress":"02:42:ac:11:00:02","DriverOpts":null}}


➜  my_go_app git:(tests) ✗ docker network ls
  NETWORK ID          NAME                DRIVER              SCOPE
  62b2dff15ff0        bridge              bridge              local
  f33ab34dd91d        host                host                local
  ee2d604d6604        none                null                local
  61a661c82262        my_go_app_network      bridge              local

我想念什么?

1 个答案:

答案 0 :(得分:1)

您的网络my_go_app_network应该声明为“外部”,否则compose将创建一个名为“ project_name _my_go_app_network”的网络。因此,您的go应用与ftp服务器不在同一个网络中。

(我想您是手动创建的my_go_app_network,所以您的docker run不会抛出任何未找到的网络错误。)

编辑

您将参数的顺序错误。映像名称必须是最后一个,否则它们将被视为容器的“命令”。尝试

docker run --name my_go_app --rm -v volume:/go --network=my_go_app_network --env-file ./test.env my_go_app:exp